Question

J'ai une application autonome dans laquelle je dois demander à l'utilisateur une boîte de dialogue de confirmation pour enregistrer les modifications apportées par lui lorsqu'il tente d'arrêter le système en démarrer - > arrêter .

J'ai appris qu'en utilisant les gestionnaires de signaux , nous pouvons le faire.
Quelqu'un peut-il m'aider à utiliser les gestionnaires de signaux

Était-ce utile?

La solution

Mise à jour de mai 2012 (2 ans et demi plus tard)

commentaires Trejkaz :

  

Sur les versions actuelles de Java, ce code de traitement du signal échoue car le code " INT " le signal est "réservé par la machine virtuelle ou le système d'exploitation".
  De plus, aucun des autres noms de signal valides ne se déclenche lorsque quelque chose demande la fermeture de l'application (j'ai juste testé minutieusement tous ceux sur lesquels je pouvais trouver ...)
  Le crochet d'arrêt fonctionne généralement, mais nous constatons que dans notre cas, il ne déclenche pas. La prochaine étape consiste donc évidemment à enregistrer un gestionnaire situé dans le dos de la JVM

Le chapitre & Intégration du signal et gestion des exceptions " du " Guide de dépannage de la machine virtuelle HotSpot " mentionne les signaux " SIGTERM , SIGINT , SIGHUP " uniquement pour SE Solaris et Linux.
Seuls les traitements d'exception sous Windows sont mentionnés.

Réponse originale (septembre 2009)

a ShutdownHook devrait pouvoir gérer ce cas

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
    public void run() {
        // what you want to do
    }
}));

(avec mises en garde )
Voir aussi:

comme illustration du traitement simple des signaux:

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('.');
    }
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top