JProgressBar wird nicht aktualisiert

henpara

Bekanntes Mitglied
Hallo zusammen,

Kurzbeschreibung: im Konstruktor einer Klasse, die JFrame erweitert wird eine JProgressBar auf die ContentPane raufgehauen und das Minimum der JProgressBar auf 0 gesetzt.

Wenn im Programm nun ein Button geklickt wird, soll, je nach Einstellung das Maximum der JProgressBar gesetzt werden, das funktioniert auch.

Anschließend werden 2 threads gestartet, wobei einer den gewohnten Arbeitsablauf ausführt und der andere im Sekundenintervallen die JProgressBar updaten soll, also deren Value / Sekunde um 1 erhöhen.

Ich hab das jetzt so umgesetzt:
Java:
class TimerThread extends Thread {
		int max;
		TimerThread(int i) { // hier wird pb.getMaximum() übergeben.
			max=i;
		}
		public void run() {
			while (getPb().getValue() < max) {//getPb gibt einem die Progressbar zurück
				int val = getPb().getValue();
				System.out.println(go.Go.mtxf.pb.getValue() + " " +        go.Go.mtxf.pb.getMaximum()); // go.Go.mtxf ist das Frame und pb die ProgressBar
				try {
					Thread.sleep(1000); // eine Sekunde warten
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				go.Go.mtxf.pb.setValue(++val); // Progressbar Wert um 1 erhöhen
				go.Go.mtxf.pb.repaint(); // neu zeichnen, damit der Fortschritt auch angezeigt wird
			}

		}
	}

nur leider bleibt auf dem Frame die ProgressBar immer wie sie ist. die Werte werden zwar korrekt ausgegeben, also das Max ist richtig gesetzt, der Wert erhöht sich korrekt alle Sekunde um eins, aber Aktualisierung auf dem Frame? Fehlanzeige.

Nun meine Frage: Hat jemand eine idee warum?
In einem Tutorial - Beispiel hat es gereicht: " progressBar.setValue(++val);"
den Befehl zu schalten und die Bar hat sich auch auf dem Frame korrekt aktualisiert. Warum klappt das bei mir nicht?

Mfg
 

henpara

Bekanntes Mitglied
Java:
void cmdCalculate_ActionPerformed() {
		setActStudy();
		if (getActStudy().equals("K")){
			pb.setMaximum(1200);
		} else if (getActStudy().equals("H") || getActStudy().equals("L")) {
			pb.setMaximum(120);
		} else 
			pb.setMaximum(120);
// hier wird das Arbeiten gesetzt.
		AbarbeitenThread at = new AbarbeitenThread(); 
// dieser Thread führt die "calculate-methoden" aus
		at.start();
// thread wird gestartet.
		TimerThread tt = new TimerThread(pb.getMaximum());
//dieser thread soll die progressbar updaten (atm nur richtwerte, wie lange je nach einstellung der //arbeitsdurchgang dauert
		tt.start();
//thread wird gestartet
		try {
			at.join();
			tt.join(); // warten bis beide threads fertig sind
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			System.out.println("Warten auf Threads fehlgeschlagen!");
			e.printStackTrace();
		}
		writeToLogBox("Sie können das Programm jetzt schließen oder die Updates einspielen!");
		writeToLogBox(System.getProperty("line.separator"));
		pnlUpdates.setVisible(true); //hat nix mit der Frage hier zu tun.
	}

Also zunächst is das mein Allererster Test mit Threads. Mein Vorgänger hat komplett ohne gearbeitet, was darauf hinausläuft, daß man das Programm nicht jederzeit verlassen kann.

Im ersten Schritt wollte ich jetzt eig. "nur" mal neben den normalen Arbeitsschritten eine ProgressBar laufen haben.
Wie ich schon erwähnt habe, stimmen die ValueZahlen der ProgressBar, es "macht also prinzipiell" das, was ich will. NUR wird die GUI nicht geupdatet, und das obwhol im Beispielprogramm NUR über das setValue() die Progressbar auch sofort aktualisiert wird.
 
S

SlaterB

Gast
das 'warten bis beide threads fertig sind' ist genau das Problem,
solange der ActionListener nicht fertig ist ist die GUI blockiert, weder wird irgendwas neugezeichnet noch funktionieren Buttons usw.

deine End-Aktion muss entweder in einen der beiden Thread oder in einen dritten der auf die anderen beiden wartet
 

henpara

Bekanntes Mitglied
das 'warten bis beide threads fertig sind' ist genau das Problem,
solange der ActionListener nicht fertig ist ist die GUI blockiert, weder wird irgendwas neugezeichnet noch funktionieren Buttons usw.

deine End-Aktion muss entweder in einen der beiden Thread oder in einen dritten der auf die anderen beiden wartet

ok, danke erstmal für den hinweis. kannst du auch kurz erläutern, was du genau mit
solange der ActionListener nicht fertig ist ist die GUI blockiert
meinst?

wieso ist die GUI blockiert?
 
S

SlaterB

Gast
die GUI ist kein Zauberkasten, sondern da gibt es genau einen Thread, der (vereinfacht) ab und zu in irgendwelchen Zustandsvariablen nachschaut, ob ein User-Ereignis wie ein Mausklick kommt oder ob ein repaint() gewünscht ist und dann paint/Listener ausführt,
wenn dieser Thread beschäftigt ist, auf deine anderen Threads zu warten oder lange Berechnungen in einer ActionPerformed ausführt, kann nix anderes mehr stattfinden
 

henpara

Bekanntes Mitglied
ok, hab mich ein wenig in die klasse swingworker eingelesen und mir eine Klasse erstellt, die swingworker extendet. dort hab ich dann 2 threads, die in der doinbackground methode erstellt und gestartet werden und in einem thread, wo ich die zeit messe, wird dann über SwingUtilities.invokeLater();
die gui geupdatet.
es funktioniert, ich bin happy ;)

mfg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JProgressBar wird nicht richtig angezeigt Java Basics - Anfänger-Themen 8
J JProgressBar - wird nicht geupdated Java Basics - Anfänger-Themen 3
H Kapselung JProgressBar in JTable, aber getValueAt() greift nicht Java Basics - Anfänger-Themen 7
S Thread.sleep mit JProgressBar Java Basics - Anfänger-Themen 1
E jProgressbar, 6 Versuche, welche value angeben ? Java Basics - Anfänger-Themen 3
E jProgressBar auf 0 stellen Java Basics - Anfänger-Themen 1
E JProgressbar Java Basics - Anfänger-Themen 8
S JProgressbar mit individuellem Start/Endpunkt Java Basics - Anfänger-Themen 11
V Zugriff auf jProgressbar Java Basics - Anfänger-Themen 10
D jProgressBar soll bei 100% sein wenn sql Abfrage inkl. jTable schreiben fertig ist... Java Basics - Anfänger-Themen 5
S JProgressBar richtig anwenden Java Basics - Anfänger-Themen 27
N JProgressBar Java Basics - Anfänger-Themen 8
K Threads jProgressBar update Java Basics - Anfänger-Themen 14
S jProgressBar läuft nicht! Java Basics - Anfänger-Themen 13
H Aktualisierung des JProgressBar in Abhängigkeit eines Threads Java Basics - Anfänger-Themen 5
Y jprogressbar beenden? Java Basics - Anfänger-Themen 4
L JProgressBar für FileUpload Java Basics - Anfänger-Themen 3
B Pseudo JProgressBar Java Basics - Anfänger-Themen 3
G JProgressBar - XP style Java Basics - Anfänger-Themen 4
G JProgressBar während dem ausführen einer Funktion Java Basics - Anfänger-Themen 3
S jProgressBar Java Basics - Anfänger-Themen 3
G JProgressBar Java Basics - Anfänger-Themen 2
G JProgressBar#2 Java Basics - Anfänger-Themen 2
G JProgressBar Java Basics - Anfänger-Themen 7
G jProgressBar value aus anderer Klasse heraus verändern Java Basics - Anfänger-Themen 7
B jProgressBar mit while nicht for Java Basics - Anfänger-Themen 13
K JProgressbar, zur laufzeit steuern Java Basics - Anfänger-Themen 7
V JProgressBar anklickbar? Java Basics - Anfänger-Themen 2
A Timer + JProgressBar Java Basics - Anfänger-Themen 4
G in JProgressBar Fortschritt anzeigen Java Basics - Anfänger-Themen 8
P JDialog & JProgressBar Java Basics - Anfänger-Themen 2
Z Problem mit JProgressBar Java Basics - Anfänger-Themen 4
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
T if-else Bedingung wird ignoriert Java Basics - Anfänger-Themen 4
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
P Webseite vom Smartmeter wird nur unleserlich angezeigt Java Basics - Anfänger-Themen 7
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
Oneixee5 Maven Plugin wird 2 mal ausgeführt Java Basics - Anfänger-Themen 10
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
C Was tun wenn .class erwartet wird ? Java Basics - Anfänger-Themen 6
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
schemil053 Multithread - Input verrutscht während etwas ausgegeben wird Java Basics - Anfänger-Themen 6
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
_user_q Timer - ScheduledExecutorService wird schon vorher beendet Java Basics - Anfänger-Themen 5
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
H Compiler-Fehler Klasse in einem Package wird nicht gefunden bzw. akzeptiert Java Basics - Anfänger-Themen 12
L Switch-Case Multiplikation wird nicht ausgegeben Java Basics - Anfänger-Themen 1
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
M Text wird in der Console nicht ausgegeben. Java Basics - Anfänger-Themen 11
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
sserio Math. Befehl wird rot markiert Java Basics - Anfänger-Themen 5
M Rechteck wird nicht angezeigt Java Basics - Anfänger-Themen 3
B Bungeecord | ProxiedPlayer wird nicht in ArrayList hinzugefügt Java Basics - Anfänger-Themen 1
U Methode wird genutzt, ohne dass ich die aufrufe? Java Basics - Anfänger-Themen 4
S Methoden Return Rückgabewert wird nicht übergeben Java Basics - Anfänger-Themen 8
M Mein quellcode wird nicht in der Konsole ausgegeben Java Basics - Anfänger-Themen 3
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
K Präzedenregeln in Java sagen, dass +expr und -expr vor + von Addition und - von Addition stehen, warum wird dann z. B. a+b als eine Addition ausgeführ Java Basics - Anfänger-Themen 7
M Was wird hier genau getestet? Java Basics - Anfänger-Themen 9
M Wie schreibe ich eine if-Verzweigung um, so dass ein Bedingungsoperator benutzt wird? Java Basics - Anfänger-Themen 9
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
M Referenzen zuweisen und wird gleichzeitig ausgeführt Java Basics - Anfänger-Themen 6
O System.out.println wird nicht ausgegeben? Java Basics - Anfänger-Themen 11
Zrebna Umgebungsvariable Wieso wird meine verwendete JDK-Version in der Prompt nicht erkannt? Java Basics - Anfänger-Themen 6
el_pato DialogFenster wird nicht in Schleife geöffnet? Java Basics - Anfänger-Themen 30
J if-Schleife innerhalb einer if-Schleife wird in der Konsole nicht gelesen Java Basics - Anfänger-Themen 4
P Apache Derby wird in Eclipse trotz Anbindung nicht gefunden Java Basics - Anfänger-Themen 6
H Array wird als Rückgabewert nicht akzeptiert? Java Basics - Anfänger-Themen 2
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
F Session wird mehrfach erzeugt Java Basics - Anfänger-Themen 11
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
fuerteb Compiler-Fehler Methode wird nicht bzw. als Fehler erkannt Java Basics - Anfänger-Themen 4
L JScrollPane wird nicht angezeigt Java Basics - Anfänger-Themen 10
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
J JTable Titel wird nicht angezeigt Java Basics - Anfänger-Themen 6
krgewb Long wird gerundet Java Basics - Anfänger-Themen 2
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
F Wieso wird immer die falsche Mausposition angegeben? Java Basics - Anfänger-Themen 1
H GridPane wird nicht angezeigt Java Basics - Anfänger-Themen 0
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben