java - 与执行程序服务卡住的混淆

标签 java swing concurrency executorservice

我正在尝试使用执行器服务运行一个 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/

相关文章:

java - 如何在没有同步块(synchronized block)(即低成本锁)的情况下在一个安全操作中原子地检查 Java 中的两个 AtomicBooleans?

c# - 没有多线程异步/等待的并发

java - Android:Socket-Connection 导致延迟和大量 GC 操作

java - 如何使用Java读取文本文件的特定部分

java - Tomcat 在一台普通服务器上每秒可以处理多少个请求?

java - 在小程序查看器中调用时出现空白屏幕

swing - 将外部文件拖入 Swing 应用程序时设置自定义光标

java - 为什么getClass返回类名+$1(或$*)

java - GridBagLayout 不排序我的元素

c - 多线程数据结构: concurrent stack