J'ai une application autonome dans laquelle je dois inviter l'utilisateur avec une boîte de dialogue de confirmation pour enregistrer les modifications apportées par lui lorsqu'il essaie d'arrêter le système par start-->shutdown
. J'ai appris à savoir qu'en utilisant signalhandlers
nous pouvons le faire.
quelqu'un peut me aider à utiliser les gestionnaires de signauxTraitement du signal en utilisant "TERM"
Répondre
Mise à jour de mai 2012 (2 ans et demi plus tard)
Trejkaz commentaires:
Sur les versions actuelles de Java ce code de traitement du signal ne parvient parce que le signal "
INT
" est "réservé par la machine virtuelle ou le système d'exploitation".
De plus, aucun des autres noms de signaux valides ne se déclenche lorsque quelque chose demande à l'application de se fermer (j'ai juste minutieusement testé tous ceux que j'ai pu découvrir ...)
Le crochet d'arrêt fonctionne principalement mais nous trouvons que notre cas, il ne se déclenche pas, donc la prochaine étape est évidemment de recourir à l'enregistrement d'un gestionnaire derrière le dos de machine virtuelle Java
le chapitre « Integrating Signal and Exception Handling » du « Troubleshooting Guide for HotSpot VM » mentionne les signaux « SIGTERM
, SIGINT
, SIGHUP
» seulement pour Solaris OS et Linux.
Seules les exceptions de gestion sous Windows sont mentionnées.
réponse originale (septembre 2009)
un ShutdownHook devrait être en mesure de traiter ce cas
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
// what you want to do
}
}));
(avec caveats)
Voir aussi:
- Java signal handling and termination (le lien est mort, voir archive ou mirror)
- java exit signal handling:
comme une illustration de traitement du signal simple:
public class Aaarggh {
public static void main(String[] args) throws Exception {
Signal.handle(new Signal("INT"), new SignalHandler() {
public void handle(Signal sig) {
System.out.println(
"Aaarggh, a user is trying to interrupt me!!");
System.out.println(
"(throw garlic at user, say `shoo, go away')");
}
});
for(int i=0; i<100; i++) {
Thread.sleep(1000);
System.out.print('.');
}
}
}
Cool - mais cela dépend de l'arbre sun.misc. *, qui est maintenant obsolète. Et des indices quant à la classe actuelle que nous devrions utiliser? – zigdon
@zigdon: Pas sûr, en fait. Ces classes sont toujours présentes dans jdk ou openjdk, http://www.docjar.com/docs/api/sun/misc/SignalHandler.html, et même si elles ne font pas partie de l'interface publique prise en charge (http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html), mais d'autres solutions peuvent impliquer JVMTI ou JMX (http://stackoverflow.com/questions/5023520/sending-signals-to-a -running-jvm) – VonC
Sur les versions actuelles de Java, ce code de gestion de signal échoue car le signal "INT" est "réservé par la VM ou le système d'exploitation". De plus, aucun des autres noms de signaux valides ne se déclenche lorsque quelque chose demande à l'application de se fermer (j'ai juste minutieusement testé tous ceux que je pouvais trouver sur ...Le hook d'arrêt fonctionne principalement mais nous constatons que dans notre cas il ne tire pas, donc l'étape suivante est évidemment de recourir à l'enregistrement d'un handler derrière le dos de la JVM. :) – Trejkaz
- 1. Redéfinir les défauts de traitement du signal
- 2. Traitement de SIGnals Linux en utilisant Gambas
- 3. Traitement d'image en utilisant ARM?
- 4. Compact Framework - Intensité du signal
- 5. bash piège de TERM - qu'est-ce que je fais mal?
- 6. Traitement du langage naturel en Ruby
- 7. À l'exclusion de l'appel du signal d'amplification
- 8. Traitement XML en Java
- 9. Impossible de mettre TERM .bashrc dans Mac
- 10. Obtenir la force du signal porteur de l'iPhone par programmation
- 11. traitement des options simple en utilisant la bibliothèque Boost (C++)
- 12. Traitement par lots dans le tableau en utilisant PHP
- 13. Besoin d'aide pour le traitement des documents en utilisant dom4j
- 14. En utilisant le ruban Office dans un traitement de texte
- 15. A propos du traitement xsl
- 16. Qu'est-ce que LTS (Long Term Support)?
- 17. Traitement du courrier électronique entrant
- 18. signal de temporisation glibmm
- 19. boost :: Public objet signal
- 20. boost :: Emballage signal C# délégués
- 21. entrée de traitement du problème pour le juge en ligne
- 22. Arrêt du processus inférieur dans GDB SANS signal?
- 23. Déboguer le signal du programme Iphone reçu: "EXC_BAD_ACCESS"
- 24. Malheurs du signal Python: Le gestionnaire SIGQUIT retarde l'exécution si SIGQUIT est reçu pendant l'exécution d'un autre gestionnaire de signal?
- 25. Capture du signal d'arrêt dans l'application Eclipse RCP
- 26. Obtenir le signal audio du haut-parleur, puis le diffuser
- 27. Amélioration du traitement des messages UDP
- 28. Traitement du code XML vide dans XSLT
- 29. Traitement du proxy WCF Proxy null Retour
- 30. Traitement des courriels en C#
Comment traiter la question de SIGINT: http://stackoverflow.com/questions/2541475/capture- sigint-in-java –