簡體   English   中英

Java 5 SwingWorker替換

[英]Java 5 SwingWorker replacement

我們的Swing應用程序使用優秀的SwingWorker類在后台線程中執行一些長時間運行的任務。 但是,許多較舊的Mac只支持Java 5,因此我們希望將應用程序編譯為5而不是6.因為SwingWorker是在Java 6中引入的,所以我們不能再使用它了。

如果我只需要在后台執行某些操作,然后在完成后在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();
}

我會讓別人評論你的代碼的適用性,但作為替代方案,你可以在這里下載一個Swingworker的后端,用於Java 5。

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

看看Foxtrot ,它的工作方式與大多數Swing並發庫不同。

它不是觸發后台線程來執行長時間運行的任務,而是通過在Swing EDT上執行長時間運行的任務並啟動新線程來處理GUI事件來顯示模式對話框,從而模擬Swing采用的方法。

當使用一個長時間運行的任務返回一個你需要立即執行的值時,這會產生一個非常好的,程序性/非並發的程序代碼(就像檢查來自JOptionPane.showConfirmDialog(...)的返回值)一樣JOptionPane.showConfirmDialog(...) )。

如果您的產品中沒有LGPL代碼的任何問題,則可以將SwingWorker的后端版本用於Java 5。

http://java.net/projects/swingworker

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM