Как захватить событие System.exit?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

25
задан harshit 27 May 2009 в 08:48
поделиться

2 ответа

Метод Runtime.addShutdownHook может использоваться для добавления ловушки выключения, которая в основном представляет собой не запущенный поток , который выполняется при завершении работы Java Виртуальная машина.

Однако это территория, к которой следует подходить осторожно, поскольку она выполняется в очень чувствительный момент жизненного цикла JVM. Из спецификаций API для метода Runtime.addShutdownHook :

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

В любом случае, обязательно прочтите немного о том, как работают хуки выключения, поскольку к ним, вероятно, не стоит приближаться без хорошей подготовки. Обязательно внимательно прочтите спецификацию API для метода Runtime.addShutdownHook .

Вот пара статей, которые я нашел при поиске информации для этого ответа:

  • Shutdown Hooks - it показывает небольшой пример того, как добавляется ловушка выключения для регистрации при выключении.

  • Дизайн API обработчиков выключения - рассматривает некоторые проектные решения хуков выключения в стиле вопросов и ответов.

51
ответ дан 28 November 2019 в 20:33
поделиться

Функция Runtime.addShutdownHook (Thread thehook) позволяет вам зарегистрировать ловушку в виртуальной машине Java.
Хук работает как инициализированный, но не запущенный поток, который будет вызываться JVM при выходе. Если вы регистрируете более одного крючка, обратите внимание, что порядок, в котором они вызываются, не определен.

6
ответ дан 28 November 2019 в 20:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: