2011-12-14 8 views
0

特定のジョブを実行するためのスレッドクラスを持つスイングアプリケーションがあります。 実行中のスレッドを停止するにはある程度の時間が必要です。だから私はスレッド内のブール値を入れ、私はそれをtrueに設定すると、スレッドが停止されます。スレッドが終了するのを待っている間にSwing GUIを更新する

問題は、内部のジョブを終了するまでにスレッドに時間がかかることです。

スレッドが終了するまで、ユーザーがGUI上で何かアクションを実行しないようにする必要があります。 私はsetEnabled(false)のようなものを試しましたが、アプリケーションがフリーズしていて、スレッドが停止するまでGUIは変更されません。 別のスレッドでGUIを更新しようとしましたが、これも機能しません。

GUIを更新する方法や、スレッドの停止が遅れている間にアプリケーションを無効にする方法はありますか?

おかげ

+0

'setEnabled(false)のようなものを試しましたが、アプリケーションがフリーズしていて、スレッドが停止するまでGUIが変更されません。' - スレッドが停止していることをどのように知っていますか? –

+0

例:setEnabled(false)でボタンを無効にしました。私はボタンを有効にしました – Joe123

答えて

5

より良いあなたがSwingWorkerを使用します。

button.setEnabled(false); 
...  
@Override 
protected String doInBackground() throws Exception { 
    // process related code 
    return ""; 
} 

@Override 
protected void done() { 
    button.setEnabled(true); 
} 

done()方法はdoInBackground()メソッドの処理が終了した後に呼び出されます。

+1

ありがとうございます:) – Joe123

+0

@ Joe123:この回答を受け入れるには、[[空のチェックマーク](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)をクリックします。 – trashgod

0

スレッドが停止したことがわかっている場合は、たとえばthread_stopped = trueという別のブール値を設定します。 アクションイベントの前に、thread_stoppedがtrueであるかどうかを確認してから、処理を続行します。