2012-01-08 11 views
8

私は、作成中のアプリケーションで負荷の高いタスクを実行するためにSwingWorkerを使用しています。今日はエグゼキュータクラスとこの例を越えましたが:SwingWorkerとExecutorの違い

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

誰かが1は、上記の例の代わりにSwingWorkerのを使用する理由を説明できますか?

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

チェック[API](http://docs.oracle.com/を実装する必要がありますSwingWorkerはExecutorServiceの 'submit(...)'メソッドから返されるFuture インターフェース(とRunnable)を実装していることがわかります。 SwingWorkerは、Swingイベントスレッドとよく対話するように構築されています。 –

答えて

7

1)SwingWorkerは方法processpublishからoutoputとEventDispatchThread

2)あなたはExecutorからSwingWorkerを呼び出すことができる上doneがなるブリッジビトウィーンズJava Essentials Classesをし、道具Futureによってスイング、そして非常保証として作成され、これはあります最も安全な方法を作成する方法

3)注意して番号またはスレッドで注意してください。Executorは誰も気にしませんSwingWorkerから状態を聴い約SwingWorkers life_cycle

4)もう一つの重要なnoticehere

5)wが、あなたはPropertyChangeListener

5

SwingWorkerは、追加のメソッド自動的にイベントディスパッチスレッドで実行されprocess()done()があります。これは私が現在SwingWorkerのを使用しています方法です。これは、ユーザーインターフェイスで進行状況や最終結果を表示する予定がある場合に便利です。

関連する問題