2013-03-15 136 views
3

我在我的java应用程序中使用了一个系统托盘。我想消失GUI并运行应用程序在背景,但系统托盘必须保持可用当用户点击关闭关闭JFrame的按钮。如何在关闭JFrame时在后台运行应用程序?

+1

当框架关闭时,不要将框架设置为EXIT_ON_CLOSE或调用System.exit。事件分派线程将继续运行,直到JVM终止为止 – MadProgrammer 2013-03-15 21:14:18

+0

@MadProgrammer这是正确的答案 - 事实上,为什么不把它作为答案? – Adrian 2013-03-15 21:26:14

+0

@adrian导致它在凌晨,我需要另一个杯子,如果茶:P – MadProgrammer 2013-03-15 21:40:19

回答

4

我想消失GUI和在后台运行的应用程序,但 系统托盘必须保持可当 JFrame的关闭按钮,用户点击。

实施设置当用户在此窗体上发起“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”。

0

您可以在单独的线程中使用系统托盘。

+0

这是一个非常危险的建议 – MadProgrammer 2013-03-15 21:14:48

+0

好的,为什么? – CodeBlue 2013-03-15 21:16:39

+1

即使TrayIcon是AWT组件,它仍然依赖并使用事件派发线程。这可能会导致更新UI以在EDT的上下文中执行。更好地把没有UI处理放在一个单独的线程 – MadProgrammer 2013-03-15 21:36:42

1

张贴这作为一个答案

就像MadProgrammer说:

不要设置帧EXIT_ON_CLOSE或调用System.exit框架时关闭。事件分派线程将继续运行,直到JVM终止为止

相关问题