2008-11-05 16 views

Respuesta

13

Puede usar Shutdown Hook.

Básicamente necesita crear un hilo que realizará sus acciones de apagado, y luego add it as a shutdown hook. Por ejemplo:

class ShutdownHook extends Thread 
{ 
    public void run() 
    { 
     // perform shutdown actions 
    } 
} 

// Then, somewhere in your code 

Runtime.getRuntime().addShutdownHook(new ShutdownHook()) 
+0

+ 1 - ¿Quizás podría elaborar con un ejemplo instructivo? ... – johnstok

+0

Ejemplo agregado. Gracias. –

1

Un gancho de cierre es el camino a seguir, pero tenga en cuenta que no hay ninguna garantía de que el código se ejecuta realmente. Los bloqueos de JVM, los fallos de alimentación o un simple "kill -9" en su JVM pueden evitar que el código se limpie. Por lo tanto, debe asegurarse de que su programa se mantenga en un estado constante, incluso si se ha cancelado abruptamente.

Personalmente, simplemente uso una base de datos para almacenar todo el estado. Su modelo de transacciones se asegura de que el almacenamiento persistente esté en buen estado sin importar lo que ocurra. Pasaron años haciendo que el código sea infalible, entonces ¿por qué debería perder el tiempo con los problemas ya resueltos?

0

El código escrito dentro de un Thread s run() método se ejecutará cuando el objeto en tiempo de ejecución termina ...

class ShutdownHookclass extends Thread { 
    public void run() { 
     // perform shutdown actions 
    } 
} 

//could be written anywhere in your code 
Runtime.getRuntime().addShutdownHook(new ShutdownHookclass()) 
1

Programa para borrar bat.bat archivo temporal cuando el programa se sale:

public class Backup { 

    public static void createBackup(String s) 
    { 

     try{ 
      String fileName ="C:\\bat"+ ".bat"; 
      FileWriter writer=new FileWriter(fileName); 
      String batquery="cd C:\\Program Files\\MySQL\\MySQL Server 5.0\\bin" 
        + "\nmysqldump -uroot -proot bankdb > \""+s+".sql\""      
        +"\nexit"; 

      writer.append(batquery); 
      writer.close(); 
     } 
     catch(Exception e){e.getMessage();} 
     try{ 
      Process p =Runtime.getRuntime().exec("cmd /c start C:\\bat.bat"); 

     } 
     catch(Exception e){e.getMessage();} 
     ShutDownHook sdh=new ShutDownHook(); 
     Runtime.getRuntime().addShutdownHook(sdh); 
    } 


} 

    class ShutDownHook extends Thread 
    { 
     public void run() 
    { 
     try 
     { 
      File f=new File("c:/bat.bat"); 
      f.delete(); 
     } 
     catch(Exception e){e.getMessage();} 

    } 

    } 
Cuestiones relacionadas