JVM не закрывается после выхода из приложения Swing - PullRequest
4 голосов
/ 12 января 2011

У меня есть свинг-приложение с кнопкой выхода, которое вызывает метод, который вызывает System.exit (0);но JVM по какой-то причине не закрывается.Кто-нибудь знает, что может привести к продолжению работы JVM?

Ответы [ 2 ]

5 голосов
/ 12 января 2011

Потоки, не являющиеся демонами, не будут препятствовать завершению программы при вызове System.exit() (а потоки демонов, конечно, не будут), но перехватчики завершения будут, если они не завершатся.

† См. Конструкция API отключающих хуков (первоначально связанная статья теперь доступна только на обратная машина ).

Swing, вероятно, использует ловушки завершения работы, но не таким образом, чтобы предотвратить завершение вашей программы.Но если вы (или какая-либо библиотека, которую вы используете) звоните Runtime.addShutdownHook(), вам лучше убедиться, что ваши перехватчики не блокируются.

Кстати, один обходной путь дляэта проблема состоит в том, чтобы добавить хук отключения, который запускает другой поток, который ждет шестьдесят секунд, а затем вызывает Runtime.halt().(Вы должны раскрутить другой поток, потому что в противном случае перехватчик, ожидая шестьдесят секунд, не даст программе завершиться в течение шестидесяти секунд.)

2 голосов
/ 12 января 2011

Может быть, у вас есть тема, которая все еще работает?

Довольно легко определить, какие потоки работают и когда.В Netbeans запустите свой проект в режиме профиля (Alt + F2), чтобы получить снимок в режиме реального времени.(Профилировщик -> Просмотр -> Темы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...