Java 5 SwingWorker替换

时间:2010-11-02 10:06:41

标签: java swing swingworker

我们的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();
}

4 个答案:

答案 0 :(得分:10)

我会让其他人评论您的代码的适用性,但作为替代方案,您可以下载Swingworker的后端以用于Java 5 here

答案 1 :(得分:3)

您的代码应该正常运行;当然你会失去SwingWorker的所有其他功能(返回部分结果和进度,可以取消,支持听众),

答案 2 :(得分:2)

看看Foxtrot,它的工作方式与大多数Swing并发库不同。

它不是触发后台线程来执行长时间运行的任务,而是通过在Swing EDT上执行长时间运行的任务并启动新线程来处理GUI来模拟Swing在显示模式对话框时所采用的方法事件

当处理一个长时间运行的任务,返回一个你需要立即执行的值时,这会产生一个非常好的,程序性/非并发的程序代码(就像检查{{1的返回值一样) }})。

答案 3 :(得分:1)

如果您的产品中的LGPL代码没有任何问题,您可以使用SwingWorker的后端版本到Java 5.

http://java.net/projects/swingworker