muss mich leider wieder mit einem Problem melden
Ich habe eine kleine Anwendung geschrieben welche mir ein paar Datein durchgeht und da dies ein wenig länger dauern kann hab ich mir einen Dialog samt ProgressBar zusammengebaut.
Diesen Dialog will ich nun in einem extra Thread starten und das funktioniert auch. Was nicht funktioniert ist, das die Komponenten in diesem Dialog gezeigt werden.
Hier der Code wie ich den Dialog aufrufe.
Java:
finalProgressDialog dlg =newProgressDialog(null);Thread t =newThread(newRunnable(){publicvoidrun(){
dlg.setVisible(true);}});
t.start();
Nachdem ich diesen Thread gestartet habe, arbeite ich die Dateien durch und schließe den Dialog wieder indem ich einfach dlg.setVisible(false); aufrufe. Wenn ich den Dialog nicht schließe bleibt er offen und die Komponenten werden gezeichnet sobald er die Daten durchgearbeitet hat. Sollte genau sowas nicht verhindert werden durch einen Thread?
schwer was in den verklausulierten Sätzen zu lesen,
ich vermute, dein Problem ist, dass erst 'am Ende' etwas zu sehen ist?
genau dieser Prozess, dieses Erstellen der Komponenten, muss in einen Thread, nicht der setVisible(true)-Aufruf
aber ziemlich vage ohne Beschreibung z.B. dieser Komponentenerzeugung, das Zusammenspiel aller beteiligten Threads/ Listener-Methoden usw.
Den Dialog erstellen und anzeigen solltest du ganz normal im EDT.
Die Aufgabe mit den Dateien musst du in einem weiteren Thread erledigen. Und von dort aus lässt du den Fortschritt aktualisieren (jedoch im EDT).
Momentan führst du die Aufgabe wohl im EDT aus (lässt sich dem Code-Ausschnitt nicht entnehmen). Dadurch wird dieser für Zeichenaufgaben blockiert.
@xehpuk
Argh, genau das war mein Problem
Vielen Dank auf jeden Fall, damit hat sich das jetzt zum Glück gelöst
Kannte Thread-Programmierung bisher nur vom Android und da gibt es diese schöne AsyncTask Klasse die das ganze ziemlich einfach macht.
Danke nochmal auch an die anderen die mir bei der Lösung des Problems geholfen haben und entschuldigt für die schlechte Beschreibung meines Problems u.u