次のコードがあるとします。
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()
を取得する方法がわかりません。助けてくれてありがとう。doInBackground()
join()
編集:回答ありがとうございます。残念ながら、get()
などは問題を完全には解決しません。私の実際のコードでは、SwingWorker にはprocess()
、バックグラウンド スレッドの実行中に GUI ウィンドウを更新するオーバーライドされた関数もあります。 get()
'done' が後まで出力されないようdoInBackground
にしますが、GUI は更新されません。これを反映するようにサンプル コードを更新しましたが、もちろんコンパイルされません。
一度だけ印刷するように「完了」する方法はありdoInBackground
ますか? GUI 更新コードと 'done' ステートメントは同じスレッドにありますか? 新しいスレッドを作成する必要がありますか?