在桌面 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
出现之前,人们是如何处理这个问题的(这看起来很基本)?
最佳答案
推荐的方法是让您的 EDT 代码开始 SwingWorker ,它将在外部完成工作并将结果返回给您。
关于java - 在 EDT 之外执行长时间运行的操作的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3504266/