典型的Swing应用程序在开始时启动EDT,当最后一个窗口关闭时,应用程序基本上停止,并返回一个隐式或显式System.exit。
但我的小应用程序实际上是一个对Swing一无所知的框架的插件。我的插件在被调用时会显示一个对话框,以便从用户那里获得一些输入,然后退出,但框架将/必须继续运行。所以我不能给System.exit打电话。
但如果我不这样做,EDT将继续运行,一旦框架完成,EDT仍将运行、运行和运行……
所以我想在不终止应用程序的情况下终止EDT。我该怎么做?
发布于 2011-01-29 05:56:40
Oracle/Sun的以下文档对这个问题进行了一些说明:AWT Threading Issues
...
在1.4之前,helper线程从未终止过。
从1.4开始,由于4030718的修复,行为发生了变化。在当前实现中,当满足以下三个条件时,AWT终止所有帮助线程,允许应用程序干净利落地退出:
因此,希望在不调用System.exit的情况下干净利落地退出的独立AWT应用程序必须:
..。
发布于 2017-11-15 03:11:27
可能有一些隐藏的窗口(例如,使用JOptionPane.showMessageDialog(…)显示的对话框已经关闭)会阻止Swing退出。您可以使用以下命令进行检查
Stream.of(Window.getWindows()).forEach(System.out::println);如果你不再需要它们,你可以很容易地摆脱它们:
Stream.of(Window.getWindows()).forEach(Window::dispose);然后,Event Dispatch Thread应停止。
https://stackoverflow.com/questions/4833357
复制相似问题