mercredi 26 janvier 2011

Arrêter proprement un script Java

Ci-dessous un programme qui appelle en boucle la méthode processSomething(...) avec un sleep de 5 secondes.

Il faut donc traiter les user interrupts dans deux cas : 
  • le cas où l'interruption se fait lors de l'exécution d'un processSomething(...) 
  • et le cas où l'interruption se fait lors du sleep de 5 secondes.

public class StopSample{
    public static boolean running = true;

    public static void main(String [] args){
        new StopSample().processMain();
    }
    public void processMain() {
        // si on interrompt durant le processSomething(...) plus bas (cas 1) :
        Runtime.getRuntime().addShutdownHook(new Thread() {
            public void run() {
                StopSample.running = false;
                logger.info("Arret du programme suite à un user interrupt");
            }
        });
        try {
            for (; running;) {
                processSomething(...);
                Thread.sleep(5000);
            }
        } catch (InterruptedException e) {
            // si on interrompt durant le Thread.sleep (cas 2) :
            logger.info("Arret du programme suite à un user interrupt");
            System.exit(0);
        }
}

Lien : http://www.roseindia.net/javatutorials/hooking%20_into_the_shutdown_call.shtml

Aucun commentaire:

Categories