2013-02-13 30 views
7

JFrameでprogressBarを更新しながら、バックグラウンドで計算するスイングワーカーを持っています。SwingWorkerが完了するまで待つ方法は?

私のメインスレッドがdoInBackground()が終了するまで待つことができますか?

私はdone()メソッドで物事を入れることができると知っていますが、プログラムを実際に待機させる方法があったのかどうか疑問に思っていました。

モーダルJDialogと同様のものです。

そう...

SwingWorker a = new SwingWorker(); 
a.execute 

doOtherStuff(); 

doOtherStuffは、doInBackgroundの完了が、SwingWorkerののなさ()メソッドでは前記方法をかけることなく、した後にのみ実行されます。

+0

の値を監視して、SwingWorkerが「非同期」操作を表しているかどうかを監視することができます。このパラダイムでは、「次の」ことをコールバックで処理する必要があります。そうでなければ、非同期イベントソースとして使用することはほとんどありません。 JDialogsはひどいハック自体です。私はエミュレートしようと勧めています。 –

答えて

9

短い答えは、はいです。

SwingWorker#getは、doInBackgroundメソッドが返されるまでブロックします。

長い答えは、おそらくあなたがしたいことではありません。あなたはEDTや呼び出しからSwingWorkerを起動した場合

SwingWorker#getあなたが戻ってあなたがSwingWorkerを使用している理由にあなたをリードして更新を処理することを妨げる、EDTがブロックされます。

この場合、2つの選択肢があります。 SwingWorkerには、SwingWorkerが完了した後にdoneからコールできるコールバックインターフェイスが用意されています。または、PropertyChangeListenerSwingWorkerに添付して、

関連する問題