2017-11-06 1 views
2

Ich muss etwas wie einen Fortschrittsbalken mit Java erstellen, die auf dem Ausgabeterminal von Netbeans erscheinen. Meine Idee ist, auf den Ausgang haben:Wie ist es möglich, etwas wie eine Fortschrittsanzeige in der Terminalausgabe mit Java zu erstellen?

loading * 

mit dem Stern, der wie etwas scheint, die mithilfe der Folge von Spin - \ |/-. Ich habe an diesen Code gedacht:

public void progressBar(int min){ //minute of spin 
    long time=System.currentTimeMillis(); 
    long check_time; 
    int i=1; 
    while(check_time-time<min){ 
     switch(i){ 
      case 1: 
       System.out.println("loading -"); 
       i++; 
      case 2: 
       System.out.println("loading \"); 
       i++; 
      case 3: 
       System.out.println("loading |"); 
       i++; 
      case 4: 
       System.out.println("loading /"); 
       i=1; 
     } 
     check_time=System.currentTimeMillis(); 
    } 
} 

aber die Ausgabe dieses Codes ist:

loading - 
loading \ 
loading | 
loading/
// and so on 

Ich würde die „Laden“ geschrieben wird, nicht kontinuierlich und das folgende Symbol in der Reihenfolge erscheinen scheint wie ein Rad, das sich dreht.

+2

Sie können '\ r' nutzen, um das Caret zu verschieben und vorhandenen Text zu überschreiben, aber die Unterstützung hängt wirklich vom Terminal ab, mit dem Sie den Fortschrittsbalken anzeigen. In jedem Fall gibt es keine Notwendigkeit, das Rad neu zu erfinden: https://github.com/ctongfei/progressbar – Jack

+0

Siehe http://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html#progress-indicator für einige weitere Möglichkeiten zu tun Fortschrittsanzeigen mit ANSI-Escape-Codes. – michid

+0

danke @michid für die Hilfe diese Website ist voller guter Inhalte. –

Antwort

3

Folgendes funktioniert in meiner Windows-Eingabeaufforderung, aber es funktioniert nicht in Eclipse, da Eclipse behandelt \r als eine vollständige \r\n. Ich weiß nicht, ob es in NetBeans oder unter Linux funktioniert.

String spin = "-\\|/"; 
for (int i = 0; i < 50; i++) { 
    System.out.print("loading " + spin.charAt(i % 4) + "\r"); 
    System.out.flush(); 
    Thread.sleep(100); 
} 

Der Code wird für 5 Sekunden gedreht.

+0

danke für die Hilfe, aber in Netbeans ist dies die Ausgabe: Laden \ BUILD ERFOLGREICH (Gesamtzeit: 5 Sekunden). und die "Zeile" hat sich nicht gedreht –

+0

Sie müssen 'System.out.flush();' direkt nach dem 'print()' aufrufen. – Andreas

Verwandte Themen