Java 5 SwingWorker 替代方案

5
我们的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个回答

10

我会让其他人评论你的代码适用性,但作为替代方案,你可以下载一个 Swingworker 的后移版本来在 Java 5 中使用,这里提供下载。


实际上,这似乎是SwingWorker的原始实现,而Sun将其移植到了标准库中。 - Kees Kist

3

你的代码应该能够正确地工作;当然,你会失去SwingWorker的其他特性(返回部分结果和进度、可取消性、支持监听器)。


2
请看一下Foxtrot,它的工作方式与大多数Swing并发库不同。
它不是启动一个后台线程来执行长时间运行的任务,而是模仿Swing当您显示模态对话框时采取的方法,通过在Swing EDT上执行长时间运行的任务并启动新线程处理GUI事件。
当使用返回值需要立即采取行动的长时间运行的任务时,这将导致非常好的程序代码,看起来像顺序/非并发(就像检查JOptionPane.showConfirmDialog(...) 的返回值一样)。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接