3

在桌面 Java 1.5 应用程序中(它必须在许多 MacOS X 机器上运行,由于 Apple 政治,这些机器会紧张地看到 1.6 VM)在 EDT 之外执行冗长计算的正确方法是什么?

例如,当用户单击启动操作的按钮时:我在 EDT 上收到通知,我想运行某个方法(例如crunchData())。

这是一种方法:

        final Thread t = new Thread( new Runnable() {
            public void run() {
                crunchData();
            }
        } );
        t.start;

我的意思是:这可以满足我的要求,但是每次用户启动一个可能需要长时间运行的任务时,我都会使用上述成语。而且我觉得我总是在不必要地创建大量任务(此外,虽然有时操作可能很长,但有时不会,在这种情况下,我希望应用程序尽可能负责)。

另一种方法是让另一个(非 EDT)线程(或线程池)始终运行,比如说在阻塞队列上等待并执行,比如说,Runnable,我会在任何需要执行冗长的地方排队手术。

处理这个问题正确方法是什么?

编辑:处理简单安装的东西的正确方法是什么SwingWorker?人们是如何处理这个(这似乎很基本)SwingWorker的?

4

1 回答 1

3

推荐的方法是让您的 EDT 代码启动一个SwingWorker,它将在外部完成工作并将结果返回给您。

于 2010-08-17T15:48:39.653 回答