Как сделать так, чтобы приложение Java было нормально завершено в Windows? - PullRequest
5 голосов
/ 15 сентября 2008

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

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

Ответы [ 2 ]

3 голосов
/ 16 сентября 2008

Ранее упомянутый подход JNI, вероятно, будет работать.

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

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

3 голосов
/ 15 сентября 2008

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

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

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

...