JProgressBar ansteuern / JBuilder 3, Java 1.2

Hallo,

ich muss mehrere Datensätze aus einer DB auslesen und verarbeiten. Den Fortschritt will ich durch einen JProgressBar (Swing) anzeigen lassen.
Ich wollte im EventHandler des entsprechenden Knopfes einfach mit

ProgressBar.setValue(xxx);

die Anzeige verändern. Das wird aber erst nach durchlauf des EventHandlers sichtbar (dann natürlich 100%). Ich habe auch schon ein

ProcessBar.revalidate();

eingefügt. Hilft alles nix. Hat jemand ein Beispiel?

Gruss, Niels

Hallo Niels,

[…]

ich muss mehrere Datensätze aus einer DB auslesen und
verarbeiten. Den Fortschritt will ich durch einen JProgressBar
(Swing) anzeigen lassen.
Ich wollte im EventHandler des entsprechenden Knopfes einfach
mit

ProgressBar.setValue(xxx);

die Anzeige verändern. Das wird aber erst nach durchlauf des
EventHandlers sichtbar (dann natürlich 100%). Ich habe auch
schon ein

ProcessBar.revalidate();

eingefügt. Hilft alles nix. Hat jemand ein Beispiel?

Das liegt an SWING und der Ereignissverwaltung. Grund: Dein Thread blockiert die Anzeige von SWING. Informationen und Hilfe findest Du unter http://java.sun.com/docs/books/tutorial/uiswing/comp… erklärt.
Der Link ist übrigens aus der Doku vom JDK.

Gruss, Niels

Gruss,
Frank

Hallo Frank,

Das liegt an SWING und der Ereignissverwaltung. Grund: Dein
Thread blockiert die Anzeige von SWING. Informationen und
Hilfe findest Du unter
http://java.sun.com/docs/books/tutorial/uiswing/comp…
erklärt.

Das Problem ist, dass hier (wie auch in den JBuilder-Beispielen) ein TimerEvent benutzt wird, um den Progressbar zu incrementieren. Ich will die Datenbank aber nicht über TimerEvent quasi Satz für Satz einlesen, sondern so schnell wie möglich.

Ich habe inzwischen auch eine Lösung dafür gefunden:
Ich lasse das Einlesen der DB und das Anzeigen des Progressbar in der run-Methode eines eigenen Threads laufen. Dann funktioniert die Anzeige.

Der Link ist übrigens aus der Doku vom JDK.

Hab ich nicht gefunden!

Gruss, Niels

Hallo Frank,

Das liegt an SWING und der Ereignissverwaltung. Grund: Dein
Thread blockiert die Anzeige von SWING. Informationen und
Hilfe findest Du unter
http://java.sun.com/docs/books/tutorial/uiswing/comp…
erklärt.

Das Problem ist, dass hier (wie auch in den
JBuilder-Beispielen) ein TimerEvent benutzt wird, um den
Progressbar zu incrementieren. Ich will die Datenbank aber
nicht über TimerEvent quasi Satz für Satz einlesen, sondern so
schnell wie möglich.

Ich habe inzwischen auch eine Lösung dafür gefunden:
Ich lasse das Einlesen der DB und das Anzeigen des Progressbar
in der run-Methode eines eigenen Threads laufen. Dann
funktioniert die Anzeige.

Genau das meinte ich, wenn auch etwas anders. Aber durch den zweiten Thread, hast Du die Ereignissverwaltung von SWING wieder zum Zug kommen lassen.

Der Link ist übrigens aus der Doku vom JDK.

Hab ich nicht gefunden!

Einfach unter JProgressBar nachschauen. Mit der Doku meine ich die von Sun zu Java.

Gruss, Niels

Gruss,
Frank