2010-06-04 10 views

Respuesta

26

Puede agregar shutdown hook para hacer cualquier limpieza.

De esta manera:

public class myjava{ 
    public static void main(String[] args){ 
     Runtime.getRuntime().addShutdownHook(new Thread() { 
     @Override 
      public void run() { 
       System.out.println("Inside Add Shutdown Hook"); 
      } 
     }); 

     System.out.println("Shut Down Hook Attached."); 

     System.out.println(5/0);  //Operating system sends SIGFPE to the JVM 
            //the JVM catches it and constructs a 
            //ArithmeticException class, and since you 
            //don't catch this with a try/catch, dumps 
            //it to screen and terminates. The shutdown 
            //hook is triggered, doing final cleanup. 
    } 
} 

luego ejecutarlo:

[email protected]:~$ javac myjava.java 
[email protected]:~$ java myjava 
Shut Down Hook Attached. 
Exception in thread "main" java.lang.ArithmeticException:/by zero 
     at myjava.main(myjava.java:11) 
Inside Add Shutdown Hook 
+3

La entrada del blog es 404 – luckydonald

4

Otra forma de manejar señales en Java es a través del paquete de sun.misc.signal. Consulte http://www.ibm.com/developerworks/java/library/i-signalhandling/ para saber cómo usarlo.

NOTA: La funcionalidad del paquete sun. * También significa que puede no ser portátil/comportarse igual en todos los sistemas operativos. Pero es posible que desee probarlo.

+0

Pero, de hecho, ¿hace lo mismo? –

+1

No, no exactamente. La API de manejo de señal que mencioné se puede usar para manejar la mayoría de las señales del sistema operativo nativo (trap, intr, kill, etc.) dentro de las aplicaciones Java. Por otro lado, ShutdownHook se invoca solo cuando JVM finalmente finaliza (después de que se recibe una señal de interrupción). – arcamax

+0

@arcamax el enlace parece estar roto – GreenGiant

Cuestiones relacionadas