2010-03-30 4 views
2

У меня есть приложение Java Swing, которое используется в качестве кластерного приложения. Проблема в том, что каждый раз, когда кластер пытается завершить работу приложения Java, он просто зависает, а Windows отображает диалоговое окно «End Now». Указанное приложение является типом сервера, поэтому он порождает поток для каждой попытки подключения к нему.Приложение Java Swing не выйдет после получения сигнала TERM

Я узнал, что кластер посылает сигнал TERM, используя программу, представленную в статье this. НО, когда консольное приложение используется как кластерное приложение, кластер может просто завершить процесс после нескольких сигналов TERM.

Я также попробовал приложение для рабочего стола с ванилью, которое доступно при создании нового проекта с использованием NetBeans 6.8. Он также не прекратится даже после получения сигнала.

Из демонстраций, сделанных выше, я думаю, что это как-то связано с Swing или с потоками. Кто-нибудь может мне с этим помочь? Спасибо.

EDIT: его можно убить, используя диспетчер задач, хотя я думаю, что он посылает другой сигнал.

ответ

2

Когда ваше приложение Java получает сигнал TERM, он будет запускать любые зарегистрированные прерывания при завершении. Одна из возможностей заключается в том, что один из этих прерываний блокировки блокируется бесконечно или занимает много времени (> 30 секунд) для запуска, в результате чего отображается диалоговое окно «End Now» Windows.

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

+0

Я как бы «исправил» эту проблему, установив задачу завершения работы где-то в реестре. Я сделал то, что вы упомянули, но я забыл выход. Я полностью забыл об этом вопросе, так как это был довольно напряженный период. –