2010-06-04 11 views

Antwort

26

Sie können eine shutdown hook hinzufügen, um eine Bereinigung durchzuführen.

So:

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. 
    } 
} 

Dann ist es laufen:

[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

Der Blog-Eintrag ist 404 – luckydonald

4

Eine andere Möglichkeit, Signale zu verarbeiten in Java über das sun.misc.signal Paket. Informationen zur Verwendung finden Sie unter http://www.ibm.com/developerworks/java/library/i-signalhandling/.

ANMERKUNG: Die Funktionalität, die in sun. * Paket ist, würde auch bedeuten, dass es möglicherweise nicht tragbar/sich das gleiche über alle OS (s) verhält. Aber vielleicht möchten Sie es ausprobieren.

+0

Aber in Wirklichkeit tut es das gleiche? –

+1

Nein - nicht genau. Die erwähnte Signalverarbeitungs-API kann verwendet werden, um die meisten systemeigenen OS-Signale (Trap, Intr, Kill usw.) in Java-Apps zu verarbeiten. Auf der anderen Seite wird ShutdownHook nur aufgerufen, wenn JVM schließlich beendet wird (nachdem ein Kill-Signal empfangen wurde). – arcamax

+0

@arcamax der Link scheint zu brechen – GreenGiant

Verwandte Themen