JprogressBar in Jdialog aktualisieren
-
Hallo ich habe ein JFrame und auf Knopfdruck kann der User Daten aus einer Datenbank importieren. Da das ziemlich lange dauern kann, will ich in einem separaten Dialog einen Progressbar mit der aktuellen Prozentangabe anzeigen lassen.
Der Importvorgang wir in einem separaten Thread ausgeführt. Leider wird der Dialog mit der Progressbar erst am Ende des Importvorgangs richtig(vollständig) dargestellt.Das Vorgehen ist so :
Ich starte den Thread
Innerhalb des Threads wird ein Dialog dargestellt und über eine öffentlichen Funktion wird die Progressbar verändert.Hat jemand eine Idee wie man das besser machen kann ?
Vielen Dank
-
Fischkopf2009 schrieb:
Der Importvorgang wir in einem separaten Thread ausgeführt. Leider wird der Dialog mit der Progressbar erst am Ende des Importvorgangs richtig(vollständig) dargestellt.
Ich habe noch keine genaue Vorstellung davon, wie das bei Dir aussieht. Im Prinzip musst Du in Deinem Import-Thread einen Wert oder ein Objekt veraendern, das den aktuellen Zustand des Importvorgangs beinhaltet. Da muss also erstmal irgendetwas drin sein, das Dir sagt "53% importiert".
Die Darstellung davon in der GUI ist etwas anderes. Ich bin mir nicht sicher, wie in diesem Zusammenhang die Standardloesungen aussehen, aber ich wuerde zusaetzlich einen Timer, also einen weiteren Thread, laufen lassen, der alle x Millisekunden ueberprueft, was das Objekt ueber den Importvorgang aussagt. Entsprechend wuerde ich dann jeweils eine Aktualisierung der Progressbar ausloesen.
Dann kann es allerdings immer noch sein, dass die Progressbar nicht richtig funktioniert. Und zwar dann, wenn die Threadprioritaeten schlecht gesetzt sind. Es ist hier wichtig, dass die Threads, die fuer die GUI zustaendig sind, eine hoehere Prioritaet als der Importthread haben. Sonst kommen sie waehrend des Import-Vorgangs einfach nicht zum Zug.
-
Fischkopf2009 schrieb:
Innerhalb des Threads wird ein Dialog dargestellt und über eine öffentlichen Funktion wird die Progressbar verändert.
Dir sollte hier klar sein, dass Du vermutlich nicht direkt die Progressbar veraenderst, sondern nur angibst, dass sie sich geaendert hat. Die grafische Aktualisierung wird letztendlich erst vom GUI-Thread ausgefuehrt. Und fuer den gilt genau das, was ich in obigem Beitrag schon gesagt habe: Es ist wichtig, dass die Threadprioritaeten gut gesetzt sind.
-