javaagent, systray и завершение работы - PullRequest
1 голос
/ 26 марта 2012

Мы пишем java-агент, который, помимо прочего, предоставляет некоторый графический интерфейс с использованием java.awt.TrayIcon.Когда мы используем этот агент, например, в Tomcat, у нас возникает следующая проблема:

  1. Пользователь запускает Tomcat с помощью сценария оболочки
  2. Наш агент добавляет значок в systray
  3. Пользовательзавершает работу Tomcat с помощью сценария оболочки
  4. Поток событий AWT видит, что все еще отображается компонент, значок системного значка, и не завершает работу
  5. Поскольку поток событий AWT не является потоком демона, все приложение не можетquit

Теперь вопрос в том, что мы должны сделать, чтобы приложение закрылось?Можно ли сделать демоном потока отправки событий AWT?Есть ли крючки отключения для агентов?Что-нибудь еще?

Ответы [ 2 ]

1 голос
/ 19 декабря 2012

Для полноты картины вот как я решил эту проблему:

Я запустил еще один поток демона с заданием, которое периодически проверяет отображаемые компоненты AWT.Если остался только один из них, а это мой значок в системном блоке, я удаляю его.Это позволяет подсистеме AWT выходить, что приводит к нормальному выходу из всего приложения.

0 голосов
/ 26 марта 2012

Вы можете попробовать добавить хук отключения (Runtime.getRuntime().addShutdownHook()), который вызывает

SystemTray.getSystemTray( ).remove( trayIcon );

...