SwingWorker
用於以下目的的區別:爪哇 - SwingWorker類和SwingUtilities.invokeLater()
- 對於在不同的線程中運行長時間運行的任務,以防止從GUI不響應
- 對於具有通過在任務通過
done()
方法結束時的長時間運行的任務產生的結果更新GUI。 - 對於具有產生並通過用
publish()
和process()
方法的幫助下,任務公佈的中間結果不時更新GUI時間。
SwingUtilities.invokeLater()
可以如下執行上述任務:
- 而不是從EDT執行
SwingWorker.execute()
的方法,我們可以執行ExecutorService.submit(new MyRunnable())
,因爲它也將創造另一個線程可以執行長時間運行的任務。 - 對於在任務結束時更新GUI,我們可以在任務結束時把代碼(寫在情形1的
done()
方法)SwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode())
。 - 爲了在任務中更新GUI,我們可以在case1中的方法
publish()
方法中放置代碼(寫在case1的process()
方法中)SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode())
。
我問這個問題,因爲問題Java - SwingWorker - Can we call one SwingWorker from other SwingWorker instead of EDT規定的問題可以通過SwingUtilities.invokeLater()
來解決,但不能與SwingWorker
我不太清楚 '問題' 是什麼。 – akf 2010-05-13 19:11:09
@akf如果你不確定,那就離開吧。簡單:) – 2010-05-13 19:19:59
您引用的問題可以通過使用SwingWorker解決。在那裏看到我的答案。 – 2010-05-13 19:45:43