Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Ранее упомянутый подход JNI будет, вероятно, работать.
Можно использовать JNA, который является в основном оберткой вокруг JNI, чтобы помочь использовать. Добавленная премия - то, что это (по-моему, по крайней мере) обычно быстрее и более удобно в сопровождении, чем необработанный JNI. Можно найти JNA в https://jna.dev.java.net/
Если Вы просто запускаете приложение в меню "Пуск", потому что Вы пытаетесь заставить его вести себя как сервис в окнах, можно использовать сервисную обертку Java, которая найдена здесь: http://wrapper.tanukisoftware.org/doc/english/download.jsp
Насколько я знаю, что необходимо начать использовать JNI для установки обработчика сообщений для сообщения Windows WM_QUERYENDSESSION.
Чтобы сделать это (если Вы плохо знакомы с Windows, программирующим как я), необходимо будет создать новый класс окна с новой функцией обработки сообщений (как описано здесь) и обработать WM_QUERYENDSESSION от обработчика сообщений.
NB: необходимо будет использовать JNIEnv:: GetJavaVM (...) и затем JavaVM:: AttachCurrentThread (...) на потоке обработки сообщений, прежде чем можно будет назвать любые методы Java из собственного кода обработки сообщений.