Как мне заставить мое Java-приложение нормально завершать работу в Windows?

StackOverflow https://stackoverflow.com/questions/61692

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top