SwingWorker次の目的で使用されます。
- GUI が応答しなくなるのを防ぐために、別のスレッドで実行時間の長いタスクを実行するため
- メソッドを介してタスクの最後に長時間実行タスクによって生成された結果で GUI を更新します
done()。 publish()およびメソッドを使用して、タスクによって生成および公開された中間結果を使用して、GUI を随時更新しprocess()ます。
SwingUtilities.invokeLater()上記のタスクを次のように実行できます。
SwingWorker.execute()EDT からメソッドを実行する代わりに、ExecutorService.submit(new MyRunnable())長時間実行されるタスクを実行できる別のスレッドも作成されるため、実行できます。- タスクの最後に GUI を更新するために、コード (
done()case1 のメソッドで記述)をタスクの最後に置くことができSwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode())ます。 - タスクの途中で GUI を更新するには、 case1 のメソッドを呼び出した場所にコード (
process()case1 のメソッドに記述)を配置します。SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode())publish()
質問Java - SwingWorker - EDTの代わりに他のSwingWorkerから1つのSwingWorkerを呼び出すことができますかで指定された問題は解決できますが、解決SwingUtilities.invokeLater()できないため、この質問をしていますSwingWorker