2010-11-02 79 views
5

我們的Swing應用程序使用優秀的SwingWorker類在後臺線程中執行一些長時間運行的任務。但是,很多舊版Mac僅支持Java 5,因此我們希望將應用程序編譯爲5而不是6。由於SwingWorker是在Java 6中引入的,因此我們不能再使用它了。Java 5 SwingWorker替換

如果我只需要在後臺執行某些操作,並在完成後在GUI中進行通信,以下方法是否可以接受?還是我忘記了一些至關重要的東西?

public static void wannabeSwingWorker(final Runnable doInBackground, final Runnable callback) { 
    Thread backgroundThread = new Thread(new Runnable() { 
     public void run() { 
      doInBackground.run(); 
      SwingUtilities.invokeLater(callback); 
     } 
    }); 
    backgroundThread.start(); 
} 

回答

10

我會讓你的代碼的適用性別人評論,但作爲替代,你可以下載SwingWorker類的一個補丁包,使用Java 5中here

+0

實際上,這是SwingWorker的原始實現,Sun將它移植到標準庫。 – 2010-11-02 10:46:12

3

您的代碼應該正常工作;當然你會失去SwingWorker的所有其他功能(返回部分結果和進度,可被取消,支持監聽程序),

2

看看Foxtrot,其工作方式不同於大多數Swing併發庫。

它通過在Swing EDT上執行長時間運行的任務並啓動一個新線程來處理模式對話框,而不是啓動後臺線程來執行長時間運行的任務,而是模擬Swing採用的方法GUI事件。

當處理一個長時間運行的任務,並返回一個需要立即執行的值時,這會產生一個非常漂亮的程序代碼(非常類似於程序代碼)(完全類似於檢查JOptionPane.showConfirmDialog(...)的返回值) 。