2012-01-08 37 views
8

我正在使用SwingWorker在我正在製作的應用程序上執行一些重負載任務。雖然今天我碰到執行人類和這個例子有:SwingWorker和Executor之間的差異

Executors.newCachedThreadPool().execute(new Runnable() { 
        public void run() { 
         someTask();  
    }); 

有人能解釋爲何人們會使用SwingWorker的,而不是上面的例子嗎?這是我目前使用的SwingWorker方式:

SwingWorker worker = new SwingWorker() {    
protected Object doInBackground() { 
    someTask(); 
return null; 
} 
}; 
worker.execute(); 
+0

檢查[API的](http://docs.oracle.com/ javase/7/docs/api/javax/swing/SwingWorker.html),您將看到SwingWorker實現了從ExecutorService的'submit(...)'方法返回的Future(接口)(和Runnable)。 SwingWorker的構建與Swing事件線程良好地交互。 – 2012-01-08 18:23:59

回答

7

1)SwingWorker創建爲橋樑中間人Java Essentials Classes和工具Future搖擺,相當保證的方法processpublish outoput和done將在EventDispatchThread

2)你可以從Executor調用SwingWorker,這是最safiest方法如何創建由工具multithreading in SwingSwingWorker

3)仔細數或線程通知,因爲Executor不在乎someho W繞SwingWorkers life_cycle

4)另一個重要noticehere

5)監聽狀態從SwingWorker你必須實現PropertyChangeListener

5

SwingWorker具有額外的方法process()done()這是在事件調度線程自動執行。如果您打算在用戶界面中顯示進度或最終結果,這一點很方便。

相關問題