は、私は次のコードを持って言う:SwingWorkerのdoInBackground()メソッドを待つ方法を教えてください。
import java.lang.InterruptedException;
import javax.swing.SwingWorker;
public class Test
{
private JDialog window;
public Test
{
// instantiate window
}
private class Task extends SwingWorker<Void, Void>
{
public Void doInBackground()
{
try { Thread.currentThread().sleep(5000); }
catch(InterruptedException e) {}
return null;
}
}
public void doTask()
{
Task task = new Task();
task.execute();
}
protected void process()
{
// update various GUI components here
}
public static void main(String args[])
{
Test t = new Test();
t.doTask();
System.out.println("done");
}
}
を私はt.doTask()
が「完了」プリントアウトする前に実行されるまで待機する必要がありますが、私は正確かどうかはわかりません。私はおそらくここでjoin()
を使用すべきであることを知っていますが、それを呼び出すスレッドが必要です。join()
からdoInBackground()
のスレッドを取得する方法がわかりません。助けてくれてありがとう。
編集:ありがとうございます。残念なことに、get()
などは、この問題をかなり解決していません。実際のコードでは、SwingWorkerには、バックグラウンドスレッドの実行中にGUIウィンドウを更新するオーバーライドされたprocess()
関数もあります。 get()
doInBackground
の後に印刷されるのを「完了」しますが、GUIは更新されません。これを反映するようにサンプルコードを更新しましたが、現在はコンパイルされません。
doInBackground
が一度だけ印刷されるように「完了」する方法はありますか? GUI更新コードと「完了」ステートメントは同じスレッドにありますか?新しいスレッドを作る必要はありますか?
いいえ、私は 'done()'を使って動作させました。ご協力いただきありがとうございます。 – Max
将来のgooglerのための注意:これは、SwingWorkerがキャンセルされたときに本当に役に立ちません。 'done()'は 'doInBackground()'が完了する前に実行できます。 :-(http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6826514 http:// stackoverflow。com/questions/6204141/swingworker-when-called-done-method- – kmort