一個代碼示例:
import org.jdesktop.swingx.util.SwingWorker; // This one is from swingx
// another one is built in
// since JDK 1.6 AFAIK?
public class SwingWorkerTest {
public static void main(String[] args) {
/**
* First method
*/
new Thread() {
public void run() {
/** Do work that would freeze GUI here */
final Object result = new Object();
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
/** Update GUI here */
}
});
}
}.start();
/**
* Second method
*/
new SwingWorker< Object , Object >() {
protected Object doInBackground() throws Exception {
/** Do work that would freeze GUI here */
return null;
}
protected void done() {
try {
Object result = get();
/** Update GUI here */
}
catch (Exception ex) {
ex.printStackTrace();
if (ex instanceof java.lang.InterruptedException)
return;
}
}
}.execute();
}
}
的選擇總是取決於個人的喜好和使用情況。
第二種方法在重構時具有優勢。當它使用的方法過大時,您可以更輕鬆地將匿名類轉換爲內部類。
我個人的偏好轉向第二個,因爲我們已經建立了一個框架,SwingWorkers可以添加和執行一個接一個......
您還需要使用SwingWorker的偵聽器。所以? – OscarRyz 2008-11-11 19:30:27
我的意思是你需要自己的監聽器(不是已經創建的監聽器接口)來管理你自己的事件。 SwingWorker爲你處理所有這些。例如,您可以覆蓋方法「完成」,這是在工作人員完成時調用的。 – 2008-11-11 19:53:29