Question

J'ai une application Java que je veux fermer "gentiment" lorsque l'utilisateur sélectionne Démarrer-> Arrêter. J'ai essayé d'utiliser des écouteurs d'arrêt JVM via Runtime.addShutdownHook (...), mais cela ne fonctionne pas car je ne peux utiliser aucun élément de l'interface utilisateur.

J'ai également essayé d'utiliser le gestionnaire de sortie dans la fenêtre de l'interface utilisateur principale de l'application, mais il n'a aucun moyen de mettre en pause ou d'arrêter l'arrêt à la mesure de mes connaissances. Comment puis-je gérer l'arrêt correctement?

Était-ce utile?

La solution

L’approche JNI mentionnée précédemment fonctionnera probablement.

Vous pouvez utiliser la JNA qui est en fait une enveloppe autour de JNI pour la rendre plus facile à utiliser. Un avantage supplémentaire est que, à mon avis au moins, il est généralement plus rapide et plus facile à maintenir que le JNI brut. Vous pouvez trouver la JNA à l'adresse https://jna.dev.java.net/

Si vous démarrez simplement l'application dans le menu Démarrer parce que vous essayez de la faire se comporter comme un service dans Windows, vous pouvez utiliser le wrapper de service java qui se trouve ici: http://wrapper.tanukisoftware.org/doc/english/download.jsp

Autres conseils

Autant que je sache, vous devez commencer à utiliser JNI pour configurer un gestionnaire de messages pour Windows WM_QUERYENDSESSION .

Pour ce faire (si vous débutez dans la programmation Windows comme moi), vous devez créer une nouvelle classe de fenêtre avec une nouvelle fonction de gestion des messages (comme décrit ici ) et gérez le fichier WM_QUERYENDSESSION à partir du gestionnaire de messages.

NB: Vous devez utiliser JNIEnv :: GetJavaVM (...), puis JavaVM :: AttachCurrentThread (...) sur le thread de gestion des messages avant de pouvoir appeler des méthodes Java à partir de votre code de gestion de message natif. .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top