如何在关闭JFrame时在后台运行应用程序?
我想消失GUI和在后台运行的应用程序,但 系统托盘必须保持可当 JFrame的关闭按钮,用户点击。
- 设定适当的JFrames method for
DefaultCloseOperation
,JFrame.setDefaultCloseOperation(HIDE_ON_CLOSE)
,默认情况下,API
实施设置当用户在此窗体上发起“close”时默认执行的操作。您必须指定以下选项之一:
DO_NOTHING_ON_CLOSE(在WindowConstants中定义):不做任何事情;要求程序处理注册WindowListener对象的 windowClosing方法中的操作。
HIDE_ON_CLOSE(在WindowConstants中定义):在调用任何注册的WindowListener对象后自动隐藏框架。
DISPOSE_ON_CLOSE(在WindowConstants中定义):在调用任何已注册的WindowListener对象后自动隐藏和配置框架。
EXIT_ON_CLOSE(在JFrame中定义):使用系统退出方法退出应用程序。仅在应用程序中使用它。
默认情况下,该值设置为HIDE_ON_CLOSE。 此属性值的更改导致属性更改事件的触发,其中 属性名称为“defaultCloseOperation”。
-
然后从
SystemTray
调用JFrame.setVisible(true)
,本次活动是由入店
您可以在单独的线程中使用系统托盘。
这是一个非常危险的建议 – MadProgrammer 2013-03-15 21:14:48
好的,为什么? – CodeBlue 2013-03-15 21:16:39
即使TrayIcon是AWT组件,它仍然依赖并使用事件派发线程。这可能会导致更新UI以在EDT的上下文中执行。更好地把没有UI处理放在一个单独的线程 – MadProgrammer 2013-03-15 21:36:42
张贴这作为一个答案
就像MadProgrammer说:
不要设置帧EXIT_ON_CLOSE或调用System.exit框架时关闭。事件分派线程将继续运行,直到JVM终止为止
当框架关闭时,不要将框架设置为EXIT_ON_CLOSE或调用System.exit。事件分派线程将继续运行,直到JVM终止为止 – MadProgrammer 2013-03-15 21:14:18
@MadProgrammer这是正确的答案 - 事实上,为什么不把它作为答案? – Adrian 2013-03-15 21:26:14
@adrian导致它在凌晨,我需要另一个杯子,如果茶:P – MadProgrammer 2013-03-15 21:40:19