Progressbar auf der Console

P

Progressbar

Gast
Hi,

ich habe eine Methode mit dem Rückgabewert
Code:
void
und ihre Berechnung im Durchschnitt ca. 15 Sekunden dauert. Aufgerufen wird sie in der
Code:
main
-Methode. Hierfür möchte ich eine Art Progressbar auf der Console ausgeben. Dafür habe ich folgende Methode, von der ich vermute, dass sie nicht viel bringen wird:

Java:
public static void printProgBar(int percent) {
		StringBuilder bar = new StringBuilder("[");

		for (int i = 0; i < 50; i++) {
			if (i < (percent / 2)) {
				bar.append("=");
			} else if (i == (percent / 2)) {
				bar.append(">");
			} else {
				bar.append(" ");
			}
		}

		bar.append("]   " + percent + "%     ");
		System.out.print("\r" + bar.toString());
	}

Rudimentärer Auszug aus der Main.java:

Java:
public class Main {

	public static void main(String[] args) {

		method.doSomething(input); //Das ist die Methode mit Rückgabewert void, die "lange" dauert
		
		//...
	}

Frage: Kann ich diese Methode doch irgendwie hinbiegen, dass ich eine Art Progressbar hinbekomme? Oder gibt es eine andere Möglichkeit, wie ich das deichseln könnte?

Danke euch.
 

L-ectron-X

Gesperrter Benutzer
Ja gut, du hast ja dein Problem eigentlich auch nur umrissen. Woran es nun scheitert, habe ich nicht deinem Posting entnehmen können.

Dann rate ich mal weiter:
Um die Berechnung von einer Konsolenausgabe abzukoppeln, musst du mit Threads arbeiten.
Hilft dir das?
 
P

Progressbar

Gast
Gut, das stimmt natürlich, wofür ich mich entschuldige.

Das Problem an der Sache ist folgendes. Die Methode
Code:
doSomething(Object o);
ist eine schon vorgefertigte Methode, die ich nicht verändern, sondern nur aufrufen kann. Sie dauert eben ziemlich lange (ca. 15 Sekunden) und ich hätte gerne für die Zeitspanne der Methodenausführungsdauer (sorry, weiß nicht, wie ich es besser formulieren soll) eine Art ProgressBar gehabt.

Die Methode

Java:
public static void printProgBar(int percent) {
        StringBuilder bar = new StringBuilder("[");
 
        for (int i = 0; i < 50; i++) {
            if (i < (percent / 2)) {
                bar.append("=");
            } else if (i == (percent / 2)) {
                bar.append(">");
            } else {
                bar.append(" ");
            }
        }
 
        bar.append("]   " + percent + "%     ");
        System.out.print("\r" + bar.toString());
    }

benötigt ja eine Art Prozentindikator, die ich im Voraus ja logischerweise nicht weiß bzw. ich bräuchte eine Art "Timer" mit der ich einen int-Wert ermittel, sodass ich die
Code:
printProgBar(int percent)
verwenden kann.

Threads? Hm.. Wie würde mir das konkret helfen?

Danke schonmal!
 

Sonecc

Gesperrter Benutzer
Wenn du nicht bestimmen kannst, wie lange die Methode brauchst, kannst du es auch nicht anzeigen.
Alternative wäre eine Anzeige die unabhängig von der Dauer ist (z.B. die inzwischen beliebte Kreis-Animation)

Der Thread hilft dir insofern als dass du deine animation ablaufen lassen kannst, während die methode läuft. Das würde sonst nicht gehen.
 
P

Progressbar

Gast
Kreis-Animation? Wie sieht sowas denn z.B. aus? Eventuell könnte ich ja das wirklich verwenden.
 

turtle

Top Contributor
Threads? Hm.. Wie würde mir das konkret helfen?

Da gibt es jede Menge Ratschläge. Google mal unter WorkerThread oder SwingWorker. Letzteres ist halt für Swing-Applikationen zugeschnitten, weil in Swing langlaufende Berechnungen NICHT den Event-Dispatch-Thread blockieren sollten, damit die GUI noch bedienbar bleibt während der Thread noch läuft-

Jedenfalls solltest Du zwei Threads A+B haben. Thread-A "berechnet" Deine Eingabe, also doSomething(). Der Thread-B wartet darauf, dass ihm "mitgeteilt" wird, dass Thread-A ein Stückchen weitergekommen ist. Diesen Fortschritt "malt" er als Progressbar auf die Konsole.

Irgenwie muss aber Deine doSomething()-Methode dahingehend geändert werden, dass sie mitteilt wie weit die Berechnung gekommen ist. Sonst bleibt noch so etwas wie in Swing ein "Indeterminate ProgressBar", wenn man nur sehen kann, dass es noch läuft man aber nicht weiss, wie lange noch. Das ist mit einer Kreis-Animation möglich, weil es dreht sich was ;-). Das scheint mir für eine Konsole eigentlich ganz gut zu passen. Wenn da / | \ - schnell hintereinander an der gleichen Stelle gezeichnet werden sieht es aus wie ein drehender Propeller, oder?
 
Zuletzt bearbeitet:

turtle

Top Contributor
Wie gefällt Dir denn diese "Animation"

Java:
		int i = 0;
		while (true) {
			System.out.print( "-\\|/".charAt(i)+"\r");			
			i = ++i % 4;
			Thread.sleep(300);
		}
 
P

Progressbar

Gast
Die Animation ist schon in Ordnung.

Ich befürchte aber, dass es für mein spezielles Problem wohl keine Lösung gibt / geben kann. Ich weiß im Voraus ja nicht, wie lange die Methode für die Bearbeitung braucht. Außerdem hat sie den Rückgabewert void, mit dem ich ja schon gleich gar nichts anfangen kann. Bearbeiten kann ich die Methode auch nicht, da sie aus einem Framework stammt.

Ich werd dann wohl ein einfaches "Bitte warten Sie auf den Abschluss des Jobs!" oder so ausgeben lassen.

Schade eigentlich.
 

Warrior7777

Bekanntes Mitglied
Hallo
Wie wäre diese Idee: doSomething() setzt den Fortschritt regelmäßig in eine Instanzvariable. Deren Wert kannst Du dann ausgeben. Die Ausgabe sollte (wie schon von anderen gesagt) in einem separaten Thread laufen. Ich hoffe, das hilft Dir. (wenn ja: danke-Button:))
 

turtle

Top Contributor
Ich meine, das alles geliefert wurde, damit es funzt.

Hier mein kleines Beispiel:
Java:
public class A {
	public A() {
	}

	public static void main(String[] args) throws InterruptedException {
		Thread worker = new Worker();
		worker.start();
		int i = 0;
		while (worker.isAlive()) {
			System.out.print( "-\\|/".charAt(i)+"\r");			
			i = ++i % 4;
			Thread.sleep(300);
		}
	}
}

class Worker extends Thread {
	@Override
	public void run() {
		try {
			Thread.sleep(15000);
			System.out.println("Berechnung fertig.");
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Progressbar aktualisieren Java Basics - Anfänger-Themen 17
C ProgressBar updaten Java Basics - Anfänger-Themen 4
felix92 MP3-Player ProgressBar Java Basics - Anfänger-Themen 29
Y Progressbar beim Mysqldump Java Basics - Anfänger-Themen 3
T Progressbar füllen? Java Basics - Anfänger-Themen 3
X BufferedWriter Dauer in ProgressBar ausgeben? Java Basics - Anfänger-Themen 2
1 Erste Schritte Progressbar füllen ?? Java Basics - Anfänger-Themen 5
C ProgressBar funktioniert nicht Java Basics - Anfänger-Themen 18
K Erste Schritte Progressbar geht nicht Java Basics - Anfänger-Themen 5
P Aktualisierungsproblem mit Progressbar Java Basics - Anfänger-Themen 5
L ProgressBar neu positionieren Java Basics - Anfänger-Themen 12
M jLabel aktuallisieren bzw Progressbar für Zeitanzeige Java Basics - Anfänger-Themen 5
M FTP Upload Applet - ProgressBar Java Basics - Anfänger-Themen 5
C Auf ProgressBar von zwei verschiedenen .class Dateien zugrei Java Basics - Anfänger-Themen 2
P Label nicht bei Progressbar zu sehen Java Basics - Anfänger-Themen 8
G ProgressBar ist verdeckt Java Basics - Anfänger-Themen 2
E ProgressBar für Kopieraktion Java Basics - Anfänger-Themen 21
H Wie hier die Progressbar benutzen? Java Basics - Anfänger-Themen 8
B Problem mit ProgressBar Java Basics - Anfänger-Themen 4
C Farbe von ProgressBar ändern Java Basics - Anfänger-Themen 3
G Progressbar aktualisiert nicht Java Basics - Anfänger-Themen 3
K Wie kann ich "enter" von der Console in Eclipse löschen? Java Basics - Anfänger-Themen 2
M Text wird in der Console nicht ausgegeben. Java Basics - Anfänger-Themen 11
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14
C das Doppelte des Wertes in der Console ausgeben Java Basics - Anfänger-Themen 10
iman Console Java Basics - Anfänger-Themen 17
T '>' vor Console input Java Basics - Anfänger-Themen 3
J Einfaches Quadrat auf der Console ausgeben lassen Java Basics - Anfänger-Themen 7
F Console command unter Linux Java Basics - Anfänger-Themen 7
O Methoden 3 Methoden gleichzeitig laufen lassen in der Console Java Basics - Anfänger-Themen 2
B Wieso gibt das Programm in der Console kein Ergebnis aus? Java Basics - Anfänger-Themen 2
J Hintergrundsound in der CMD Console, wie? Java Basics - Anfänger-Themen 14
GENiALi Java Console Anwendung starten in Prozess Java Basics - Anfänger-Themen 3
L Java CMD Console in String umwandeln? Java Basics - Anfänger-Themen 2
P Erste Schritte Console - Sehr komische Ausgabe! Java Basics - Anfänger-Themen 3
K Klasse console.InputHelper.readString() nicht utzbar Java Basics - Anfänger-Themen 3
B Console Beschreibung Java Basics - Anfänger-Themen 1
C Hilfe für Kommentar-Zapper gesucht / Umgang mit Console Java Basics - Anfänger-Themen 0
D Einlesen eines Enum-Wertes per console Java Basics - Anfänger-Themen 3
O Einlesen einer Matrix von der Console Java Basics - Anfänger-Themen 18
G UnsatisfiedLinkError erscheint nur über Console Java Basics - Anfänger-Themen 6
J Zusätzliche Console Öffnen Java Basics - Anfänger-Themen 6
G 3422 Zeilen in Eclipse Console Java Basics - Anfänger-Themen 5
H Input/Output Console löschen und Eingaben in Echtzeit Java Basics - Anfänger-Themen 3
S Erste Schritte Ausgabe in der Console "ändern" Java Basics - Anfänger-Themen 4
T Input/Output Scanner Eingaben auf Console farbig darstellen, wie? Java Basics - Anfänger-Themen 13
IngoF wie kann man die Console nachträglich öffnen? Java Basics - Anfänger-Themen 6
J Eclipse Console Ausgaben Abfangen Java Basics - Anfänger-Themen 2
N Zeile in Console einlesen Java Basics - Anfänger-Themen 3
B Limit console output in Eclipse Java Basics - Anfänger-Themen 6
S Elemente eines Arrays in Console eingeben Java Basics - Anfänger-Themen 5
C Packet inout.Console Java Basics - Anfänger-Themen 3
Y System.console() liefert immer null zurück. Java Basics - Anfänger-Themen 6
H Windows Console Ausgabe ? Java Basics - Anfänger-Themen 3
P Telefonbuch (Console) Java Basics - Anfänger-Themen 8
N Ausgabe Problem System.console().printf() Java Basics - Anfänger-Themen 6
J I/O - Console Java Basics - Anfänger-Themen 7
D User - Interface über die Console Java Basics - Anfänger-Themen 14
K Datein auf der Console anzeigen lassen ? Java Basics - Anfänger-Themen 4
K fehler mit der Befehl Console Java Basics - Anfänger-Themen 3
G Klasse "Console" Java Basics - Anfänger-Themen 4
S Nachricht von Console auf Screen wiedergeben die zweite:-) Java Basics - Anfänger-Themen 7
S Nachricht von Console auf Screen wiedergeben Java Basics - Anfänger-Themen 17
K javadoc eigenes doclet in console starten Java Basics - Anfänger-Themen 3
S Ausgabe auf der Java-Console (Java Problem) Java Basics - Anfänger-Themen 13
G Java Console clear && Methode erstellen && P Java Basics - Anfänger-Themen 6
G Von der Console einlesen Java Basics - Anfänger-Themen 5
C Alle Zeichen, die in der Console sind in Textdatei Java Basics - Anfänger-Themen 12
S syso ohne console Java Basics - Anfänger-Themen 6
A Ein TextFeld als mit Echtzeitausgabe? (Wie bei der Console) Java Basics - Anfänger-Themen 3
Blackmore XML in Console ausgeben Java Basics - Anfänger-Themen 13
M .jar in Console öffnen? Java Basics - Anfänger-Themen 19
D Thread und Process Kommunikation bei eigener Console Java Basics - Anfänger-Themen 2
A Javaprogramm kann nicht in der Console ausgeführt werden Java Basics - Anfänger-Themen 12
G Eigene Console mit Java Java Basics - Anfänger-Themen 2
Z Eingabe in Console als Variable Java Basics - Anfänger-Themen 10
I Console will nicht Java Basics - Anfänger-Themen 10
J Variablen in die Console mit Eclipse Java Basics - Anfänger-Themen 3
I Farben bei der Console Java Basics - Anfänger-Themen 2
M unauffindbarer Fehler Console, aber unter Eclipse gehts. =( Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben