2009-08-24 3 views
4

Ich mache ein Java-Befehlszeilenprogramm.Wie kann ich die Anzeige einer Zeile in meinem Befehlszeilen-Java-Programm ändern, ohne eine neue Zeile anzuzeigen?

Wie kann ich den Inhalt einer bereits angezeigten Zeile ändern?

zum Beispiel So konnte ich zeigen:

Status: 0%
Status: 2%
...
Status: 50%

Ausnahme, anstatt weiterhin jeweils nach unten drücken Neue Zeile, ich ändere einfach den Inhalt der bestehenden Zeile, so dass sich der% done an Ort und Stelle ändert.

Ich habe gesehen, dass einige Konsolenprogramme dies vorher tun, also wie kann ich es in Java machen?

Antwort

3

In den meisten Fällen können Sie einen Wagenrücklauf (\r) anstelle eines Zeilenumbaus (\n) ausgeben. Dies hängt von dem Terminal ab, das es unterstützt, was die meisten tun. \r bewegt den Cursor zurück zum Anfang der Zeile.

EDIT: Natürlich, wenn dies zu tun, verwenden Sie System.out.print anstatt System.out.println (oder nur verwenden in der Regel die Ebene, nicht ln, Form der Ausgabemethode Sie verwenden) - da die ln Suffix bedeutet, dass Ihr Text automatisch ist gefolgt von einem Zeilenumbruch.

Beispiel:

for (n = 10000; n < 10010; ++n) { 
    System.out.print(String.valueOf(n) + "\r"); 
} 
System.out.println("Done"); 

Wenn dies abgeschlossen ist, werden Sie wahrscheinlich diesen Bildschirm auf der Konsole haben werden:

Done0 

... da „Fertig“ ist kürzer als die längste vorherigen, was Sie Ausgabe, und so nicht vollständig überschreiben (daher die 0 am Ende, übrig von "10010"). Die Lektion lautet also: Behalte das längste, was du schreibst, und überschreibe es mit Leerzeichen.

+0

Wird dies die Ausgabe an den vorher ausgegebenen "Druck" nicht anhängen? –

+0

Irgendein Code, den ich kenne, benutzt '\ b', um die zu ersetzenden Bits" zurückzusetzen ", anstatt die ganze Zeile durch' \ r' zu ersetzen. –

+0

@Isharyan: '\ r' setzt den Cursor an den Anfang der Zeile ("für die meisten Terminals"), also wird alles, was Sie anhängen, am Anfang der Zeile angezeigt. –

2

Werfen Sie einen Blick auf this example.

Arbeitscode:

public class progress { 
    public static void main(String[] args) throws InterruptedException {  
     for (int i = 0; i <= 100; i++) { 
      Thread.sleep(30); 
      System.out.print("\rSTATUS: "+i+" % "); 
     } 
    } 
} 

Tipp: Weitere Google - Java-Konsole Statusleiste

+0

Ich würde hinzufügen, dass JLine sehr gut für diese Art von Sachen funktioniert –

Verwandte Themen