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:
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
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