2013-02-13 14 views
7

Ich habe einen Swing Worker, der im Hintergrund berechnet, während ein Fortschrittsbalken in einem JFrame aktualisiert wird.Warten bis ein SwingWorker fertig ist?

Wie kann ich mein Haupt-Thread warten, bis die doInBackground() machen zu beenden?

Ich weiß, dass ich die Dinge in done() Methode setzen kann, aber ich frage mich, ob es ein Weg, um tatsächlich das Programm warten zu lassen (das Gewinde, um korrekt zu sein).

etwas Ähnliches, was ein modaler JDialog tun würde.

So ...

SwingWorker a = new SwingWorker(); 
a.execute 

doOtherStuff(); 

doOtherStuff erst nach doInBackground läuft vollständig ist, aber ohne denen das Verfahren in dem getan() -Methode des Swingworker zu setzen.

+0

A Swingworker eine „asynchrone“ Operation darstellt. Mit diesem Paradigma sollte das "nächste" zu tun in einem Callback behandelt werden - andernfalls wird es als asynchrone Ereignisquelle wenig genutzt. JDialogs sind furchtbare Hacks selbst .. nicht etwas, das ich empfehlen würde zu emulieren. –

Antwort

9

Die kurze Antwort ist, ja.

SwingWorker#get wird blockiert, bis die doInBackground Methode zurückgibt.

Die lange Antwort ist wahrscheinlich nicht das, was Sie tun möchten.

Wenn Sie die SwingWorker aus dem EDT und den Anruf starten SwingWorker#get werden Sie den EDT Block sein, es aus der Verarbeitung von Updates zu verhindern, die Sie zurück zum Grund führt, warum Sie SwingWorker verwenden.

In diesem Fall haben Sie zwei Möglichkeiten. Sie könnten SwingWorker mit einer Callback-Schnittstelle bereitstellen, die von done aufgerufen werden könnte, sobald die SwingWorker abgeschlossen ist. Oder Sie könnten eine PropertyChangeListener zum SwingWorker befestigen und überwachen den state Wert, zu warten, bis es StateValue.Done gleich

Verwandte Themen