NB. Вам нужно будет использовать JNIEnv :: GetJavaVM (...), а затем JavaVM :: AttachCurrentThread (...) в потоке обработки сообщений, прежде чем вы сможете вызывать любые методы Java из собственного кода обработки сообщений.

я есть Java-приложение, которое я хочу «красиво» выключить, когда пользователь выбирает «Пуск» -> «Выключение». Я пытался использовать JVM слушателей завершения через Runtime.addShutdownHook (...), но это не работает, так как я не могу использовать какие-либо элементы пользовательского интерфейса из него.

Я также пытался использовать обработчик выхода в главном окне пользовательского интерфейса приложения, но, насколько я могу судить, он не может приостановить или остановить остановку. Как я могу справиться с выключением красиво?

 Andrzej Rehmann14 февр. 2014 г., 14:14
Вы нашли рабочее решение?

Ответы на вопрос(2)

Решение Вопроса

Вы можете использовать JNA, которая по сути является оболочкой для JNI, чтобы упростить ее использование. Дополнительным бонусом является то, что он (по крайней мере, на мой взгляд), как правило, быстрее и более удобен в обслуживании, чем сырой JNI. Вы можете найти JNA наhttps://jna.dev.java.net/

Если вы только запускаете приложение в меню «Пуск», потому что вы пытаетесь заставить его вести себя как служба в Windows, вы можете использовать оболочку java, которая находится здесь:http://wrapper.tanukisoftware.org/doc/english/download.jsp

вам нужно начать использовать JNI для настройки обработчика сообщений для WindowsWM_QUERYENDSESSION сообщение.

Для этого (если вы новичок в программировании Windows, как я), вам нужно создать новый класс окна с новой функцией обработки сообщений (как описаноВот) и обработать WM_QUERYENDSESSION из обработчика сообщений.

NB. Вам нужно будет использовать JNIEnv :: GetJavaVM (...), а затем JavaVM :: AttachCurrentThread (...) в потоке обработки сообщений, прежде чем вы сможете вызывать любые методы Java из собственного кода обработки сообщений.

Ваш ответ на вопрос