Auf Ende von mehreren Threads warten, ohne den EDT zu blockieren

Status
Nicht offen für weitere Antworten.

tomse

Mitglied
Hallo alle zusammen,

ich hoffe jemand kann mir bei folgendem Problem helfen:

mein Programm lädt mehrere Dateien parallel in verschiedenen Threads.
Damit der User weiss was los ist, wird der Progress in einem modalen Dialog dargestellt.
Programmtechnisch sieht das vereinfacht folgendermassen aus:

Pro zu ladender Datei wird ein Thread-Objekt angelegt und einer ProgressManager Klasse uebergeben. Diese besitzt eine 'start' Methode, welche die ersten 3 Threads started und den Dialog auf 'visible' setzt. Sobald ein Thread beendet ist, wird der nächste gestartet, bis alle Threads ausgeführt wurden. Nun wird der Dialog wieder auf 'invisible' gesetzt und der Kontrollfluss der 'start' Methode kehrt zurueck.
Die einzelnen Threads kennen den Dialog und melden ihren Progress, der über 'SwingUtilities.invokeLater' wieder in den EDT umgeleitet wird. Die einzelnen geladenen Dateien werden in den Thread-Objekten abgelegt und nach Ablauf der 'start' Methode aus diesen rausgeholt.

Nun das eigentliche Problem:
Den Dialog will ich durch eine Ausgabe auf das GlassPane ersetzen. Das Problem ist jetzt, dass die 'start' Methode sofort zurueckkehrt (da alles andere ja in den separaten Threads erledigt wird) und damit schon versucht wird auf das Ergebnis der einzelnen Threads zuzugreifen, bevor diese fertig (oder ueberhaupt gestartet) sind. Vorher hat der modale Dialog das verhindert. Um das Problem zu lösen hab ich ans Ende der 'start' Methode ein 'CountDownLatch.await' gesetzt, was von den einzelnen Threads runtergezählt wird. Das funkioniert leider nicht, da dadurch der EDT blockiert wird und die invokeLater Aufrufe die GUI nicht mehr aktualisieren können.

Was ich also bräuchte, wäre ein Mechanismus wie mit dem Modalen Dialog. Also wie kann der modale Dialog verhindern, dass der Kontrollfluss der 'start'-Methode zurückkehrt ohne den EDT zu Blockieren?

Anmerkung:
Ich koennte natürlich über einen Callback auf das Ende der Threads warten, und dann weitermachen, möchte aber meine ürsprüngliche Implementierung nicht umstrukturieren.
 

Marco13

Top Contributor
Was ich also bräuchte, wäre ein Mechanismus wie mit dem Modalen Dialog. Also wie kann der modale Dialog verhindern, dass der Kontrollfluss der 'start'-Methode zurückkehrt ohne den EDT zu Blockieren?

Die Antwort steht in der Klasse "dialog", in der "show"-Methode: Wenn der Dialog NICHT modal ist, wird er einfach angezeigt. Aber WENN er modal ist, passieren viele, viele, ziemlich dramatische Sachen (es wird sozusagen ein neuer EDT erstellt, der dem ursprünglichen EDT übergeordnet ist!) die man kaum selbst nachbauen kann.

Ein Ansatz wäre vielleicht - wenn ich das richtig verstanden habe - die "start"-Methode von einem eigenen Thread ausführen zu lassen?! DEN kann man dann ja blockieren, solange man will....
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
S Kann man erzwingen, dass Java 'zu Ende zeichnet'..? AWT, Swing, JavaFX & SWT 7
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
B Programmende bei Ende der XSession AWT, Swing, JavaFX & SWT 0
I Pfeil zeichnen am Ende einer Linie AWT, Swing, JavaFX & SWT 1
G JScrollPane bricht am Ende der Anzeige nicht um AWT, Swing, JavaFX & SWT 2
W Swing Zum Ende einer Scrollpane scrollen AWT, Swing, JavaFX & SWT 2
V Ende eines Frames abwarten AWT, Swing, JavaFX & SWT 7
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
M Anzeige updatet sich erst am Ende des Programms AWT, Swing, JavaFX & SWT 3
A Ende eines Dialoges abwarten AWT, Swing, JavaFX & SWT 16
D Swing JProgressBar soll ende erkennen AWT, Swing, JavaFX & SWT 4
P Swing JTable null values an das Ende verschieben AWT, Swing, JavaFX & SWT 2
S (Applets) JProgressBar wird erst am Ende angezeigt AWT, Swing, JavaFX & SWT 13
C Swing Labeltext am Anfang statt am Ende kürzen AWT, Swing, JavaFX & SWT 6
T DND mit JList Elemente nicht am Ende einfügen AWT, Swing, JavaFX & SWT 3
A Swing JScrollPane ans ende Scrollen AWT, Swing, JavaFX & SWT 9
H JList in JScrollPane -> ScrollBar ans Ende setzen AWT, Swing, JavaFX & SWT 5
S SWT Spinner - Coursor ans Ende AWT, Swing, JavaFX & SWT 19
M JTextPane Ende des Feldes AWT, Swing, JavaFX & SWT 4
N SWT Ende vom String in Text anzeigen AWT, Swing, JavaFX & SWT 5
K Listeners und das Ende einer Componente AWT, Swing, JavaFX & SWT 4
G Shift + Ende auf JTable AWT, Swing, JavaFX & SWT 2
G Icon ans Ende einer JToolbar AWT, Swing, JavaFX & SWT 7
G Am Ende einer Tabellenzeile zu definierter Komponente gehen AWT, Swing, JavaFX & SWT 2
M JTable zum Anfang oder Ende springen AWT, Swing, JavaFX & SWT 9
G Das ende von einem JTextPane abschneiden AWT, Swing, JavaFX & SWT 2
thE_29 JScrollPane Ende rausfinden AWT, Swing, JavaFX & SWT 3
W JFileChooser speicher von Datein mit und ohne ende AWT, Swing, JavaFX & SWT 2
T "..." am Ende der Zelle in JTable AWT, Swing, JavaFX & SWT 2
G Ikonli in Fat-Jar mit mehreren Icon-Packs einbinden AWT, Swing, JavaFX & SWT 5
F Zeile in mehreren Jtables bei Selektion markieren AWT, Swing, JavaFX & SWT 11
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
P JavaFx - Progressbar - Füllen mittels mehreren Tasks AWT, Swing, JavaFX & SWT 0
O Basics - Anwendung erstellen mit mehreren Szenen AWT, Swing, JavaFX & SWT 1
N Taschenrechner mit mehreren Rechnungen AWT, Swing, JavaFX & SWT 18
M Swing MVC-Pattern - View mit mehreren Models AWT, Swing, JavaFX & SWT 5
B JavaFX PrinterJob mit mehreren Seiten AWT, Swing, JavaFX & SWT 0
T JavaFX Label mit mehreren Images AWT, Swing, JavaFX & SWT 11
R KeyListener in mehreren Panels AWT, Swing, JavaFX & SWT 5
M Ein Element in mehreren JList selektieren AWT, Swing, JavaFX & SWT 5
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
S JComboBox mit mehreren Spalten? AWT, Swing, JavaFX & SWT 6
K Swing Keine Reaktion auf Tastatureingaben bei mehreren Buttons??? AWT, Swing, JavaFX & SWT 4
M Swing MVC mit mehreren Klassen AWT, Swing, JavaFX & SWT 2
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
K Swing Klassenstruktur mit mehreren JPanels AWT, Swing, JavaFX & SWT 3
M Applikation mit mehreren Scenes AWT, Swing, JavaFX & SWT 5
F Swing JAVA GUI Übergabe von Werten zwischen mehreren Fenstern/Klassen AWT, Swing, JavaFX & SWT 10
A JButton - Klicks zählen auf mehreren Buttons AWT, Swing, JavaFX & SWT 2
J Mit mehreren in Objekten in JFrame printen? AWT, Swing, JavaFX & SWT 8
P Liste mit Icons und mehreren Spalten AWT, Swing, JavaFX & SWT 7
B Swing Formular mit mehreren Elementen - wie die ActionListener-Verarbeitung lösen? AWT, Swing, JavaFX & SWT 2
S Shape erstellen der aus mehreren Elementen besteht..? AWT, Swing, JavaFX & SWT 3
F Tablemodel zu mehreren Tabellen AWT, Swing, JavaFX & SWT 6
T Sichtbarmachen von Objekten auf mehreren JPanels AWT, Swing, JavaFX & SWT 2
DamienX Swing Component auf mehreren Containern AWT, Swing, JavaFX & SWT 2
B Swing JFormattedTextField auf mehreren JPanels in einer JTabbedPane AWT, Swing, JavaFX & SWT 3
M In Jlist auf Änderungen von mehreren JLabels reagieren AWT, Swing, JavaFX & SWT 3
E JTable nach mehreren Spalten sortieren AWT, Swing, JavaFX & SWT 14
B SWT SWT Tree mit mehreren Spalten AWT, Swing, JavaFX & SWT 3
W GUI in mehreren Threads AWT, Swing, JavaFX & SWT 5
J Swing JComboBox mit mehreren Spalten AWT, Swing, JavaFX & SWT 4
J SWING Fenster mit mehreren JPanels (dank JLayeredPane) AWT, Swing, JavaFX & SWT 19
T Swing KeyListener mit mehreren Objekten AWT, Swing, JavaFX & SWT 2
G Verliere Referenz von Toolbar bei mehreren Fenster AWT, Swing, JavaFX & SWT 3
M MVC: Grundidee verstanden aber was machen mit mehreren Model AWT, Swing, JavaFX & SWT 2
R Daten in JTable in mehreren Zeilen darstellen AWT, Swing, JavaFX & SWT 11
G JDialog mit mehreren Elementen! AWT, Swing, JavaFX & SWT 5
G Ein Frame mit mehreren austauschbaren Panels AWT, Swing, JavaFX & SWT 3
S JTable audrucken, aber mit mehreren Footers und Headers AWT, Swing, JavaFX & SWT 2
O Zwischen mehreren Bildern wechseln AWT, Swing, JavaFX & SWT 6
S Enter in JLabel - oder: JTabbedPane mit mehreren JLabel AWT, Swing, JavaFX & SWT 3
I Arbeiten mit mehreren Fenstern AWT, Swing, JavaFX & SWT 4
H jar-archive mit mehreren Klassen erstellen AWT, Swing, JavaFX & SWT 3
G Organisation Anwendung mit mehreren Eingabedialogen AWT, Swing, JavaFX & SWT 3
L Probleme mit mehreren Canvas: Überlagerungseffekte? AWT, Swing, JavaFX & SWT 5
N JComboBox mit mehreren Spalten AWT, Swing, JavaFX & SWT 21
Q Auf mehreren JPanels Bilder zeichnen. AWT, Swing, JavaFX & SWT 5
T Swing: MainForm mit mehreren Tabs AWT, Swing, JavaFX & SWT 6
K Spaltenbreite von mehreren Tabellen gleichzeitig verändern AWT, Swing, JavaFX & SWT 3
H JTable Text aus mehreren Zellen in einer Spalte kopieren? AWT, Swing, JavaFX & SWT 3
R Navigieren zwischen mehreren Fenstern AWT, Swing, JavaFX & SWT 7
U Anwendung mit mehreren "Fenstern" AWT, Swing, JavaFX & SWT 4
M JDialog mit mehreren Eingabenfeldern? AWT, Swing, JavaFX & SWT 5
M jtabbedpane mit mehreren layoutmanagern? AWT, Swing, JavaFX & SWT 2
V Werte mehreren Checkboxes zuweisen AWT, Swing, JavaFX & SWT 3
T JList mit mehreren spalten AWT, Swing, JavaFX & SWT 2
M Mit mehreren Panels arbeiten AWT, Swing, JavaFX & SWT 2
A JFrame mit mehreren Panels AWT, Swing, JavaFX & SWT 10
P JTable nach mehreren Spalten sortieren AWT, Swing, JavaFX & SWT 15
V JTable mit mehreren Componenten in einer Spalte ? AWT, Swing, JavaFX & SWT 6
M Dialog mit mehreren Komponenten AWT, Swing, JavaFX & SWT 4
N Checkbox mit mehreren Strings belegen? AWT, Swing, JavaFX & SWT 6
frager2345 Threads -> Ereignisbehandlung AWT, Swing, JavaFX & SWT 2
J GUI Ausgaben aus Threads AWT, Swing, JavaFX & SWT 13
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
N JavaFX Logging des JavaFX Application Threads mit Log4J AWT, Swing, JavaFX & SWT 3
U JAVAFX observer und threads AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben