Найти из ShutdownHook, почему программа выходит - PullRequest
3 голосов
/ 22 ноября 2011

Если у меня есть Java-программа, которая может выйти по разным причинам, например:

  • потому что главное окно, которое настроено на «выход при закрытии», было закрыто

  • потому что в коде есть какой-то System.exit (0)

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

И у меня установлен крюк отключения (работает нормально).

Есть ли какой-нибудь способ узнать, что вызвало завершение работы Java-программы из моего обработчика завершения работы?

(обратите внимание, что я не спрашиваю, хорошая ли это идея или нет System.exit(...) распространяться по кодовой базе: вопрос не в этом)

По сути, я хотел бы знать, заставляю ли я себя перехватывать каждую возможную точку выхода из JVM и добавлять туда информацию или есть метод, позволяющий это сделать.

Ответы [ 2 ]

4 голосов
/ 22 ноября 2011

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

0 голосов
/ 22 ноября 2011

При завершении работы JVM ваша ловушка отключения будет просто запускать вашу работающую логику в отдельном потоке. С этим больше ничего не поделаешь.

...