我正在尝试使用执行器服务运行一个 Swing Worker,但发生了一些奇怪的事情。我目前正在使用方法 newSingleThreadExecutor();
以及执行以下操作;
Future<?> f = execService.submit(swingWorker);
JOptionPane.showMessageDialog(null, "Created Future");
f.get(120, TimeUnit.SECONDS);
只要我不关闭对话框消息框,我的 Swing Worker 代码就会完美运行。如果我关闭该对话框,那么我的应用程序就会完全卡住。我相信线程被阻塞,但不确定原因是什么。
如果我在没有 execService 帮助的情况下单独运行 swingworker,它会完美地工作,但当然超时功能不可用,这就是这样做的全部目的。我应该只使用计时器吗?
谢谢
最佳答案
如果它看起来像:
public void closeDialog(){
SwingUtitilies.invokeLater(new Runnable(){
public void run(){
Future<?> f = execService.submit(swingWorker);
JOptionPane.showMessageDialog(null, "Created Future");
f.get(120, TimeUnit.SECONDS);
}
});
}
您正在阻止(暂停)EDT。 f.get()
将阻塞,直到 Future 的处理完成。
关于java - 与执行程序服务卡住的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9265363/