如何停止Swing EDT

Jen*_*der 12 java swing event-dispatch-thread

典型的Swing应用程序在开始时启动EDT,当最后一个窗口关闭时,Application基本上使用隐式或显式的System.exit停止.

但是我的小应用程序实际上是一个对Swing一无所知的框架的插件.我的插件将在调用时显示一个对话框,以便从用户那里获得一些输入并在之后退出,但框架将/必须继续运行.所以我不能打电话System.exit.

但如果我不这样做,EDT将继续运行,一旦框架完成,EDT仍将运行并运行并运行...

所以我想在不杀死应用程序的情况下杀死EDT.我怎么做?

aio*_*obe 12

Oracle/Sun的以下文档阐述了该问题:AWT线程问题

[...]

在1.4之前,辅助线程从未终止.

从1.4开始,由于4030718的修复,行为已经改变.使用当前实现,AWT终止其所有帮助程序线程,允许应用程序在满足以下三个条件时干净地退出:

  • 没有可显示的AWT或Swing组件.
  • 本机事件队列中没有本机事件.
  • java EventQueues中没有AWT事件.

因此,希望在不调用System.exit的情况下干净地退出的独立AWT应用程序必须:

  • 确保在应用程序完成时使所有AWT或Swing组件无法显示.这可以通过在所有顶级Windows上调用Window.dispose来完成.请参见Frame.getFrames....
  • 确保应用程序使用任何AWT或Swing组件注册的AWT事件侦听器的任何方法都无法运行到无限循环或无限期挂起.例如,由某些AWT事件触发的AWT侦听器方法可以将相同类型的新AWT事件发布到EventQueue.参数是AWT事件侦听器的方法通常在辅助线程上执行.

[...]

  • 有一些问题,IIRC.您需要确保"处置"**所有**资源. (2认同)