javaagent,systray和shutdown

时间:2012-03-26 14:03:20

标签: java awt systray javaagents

我们编写了一个java代理,它使用java.awt.TrayIcon提供某种GUI。当我们使用这种代理时,例如Tomcat,我们有以下问题:

  1. 用户使用shell脚本启动Tomcat
  2. 我们的代理人向systray添加了图标
  3. 用户使用shell脚本关闭Tomcat
  4. AWT事件线程看到,仍然有可显示的组件,系统托盘图标,并且没有退出
  5. 由于AWT Event线程是非守护程序线程,整个应用程序无法退出
  6. 现在问题是,我们该怎么做才能让应用程序关闭?是否可以制作AWT事件调度线程守护程序?代理商是否有关机挂钩?还有什么吗?

2 个答案:

答案 0 :(得分:1)

为了完整起见,以下是我如何解决这个问题:

我已经使用该作业启动了另一个守护程序线程,该程序会定期检查可显示的AWT组件。如果只剩下其中一个,那就是我的系统托盘图标,那么我将其删除。这允许AWT子系统退出,从而导致整个应用程序正常退出。

答案 1 :(得分:0)

您可以尝试添加一个调用

的关闭挂钩(Runtime.getRuntime().addShutdownHook()

SystemTray.getSystemTray( ).remove( trayIcon );