Was ist und wozu dient ein Shutodown Hook?
Es kommt immer wieder vor, dass bestimmte Operationen beim Beenden
eines Programms, auch beim unvorhergesehenen Terminieren, auf jeden
Fall ausgeführt werden müssen. So sollten z.B. offenen
Dateien und Datenbankverbindungen auf jeden Fall geschlossen werden.
Hierbei
kann ein Shutdown Hook Verendung finden. Dies ist ein ungestarteter
Thread
, der der Laufzeitumgebung des Programms
hinzugefügt wird und der bei der Terminierung des Programms
gestartet wird.
Das Beispiel weist zwei Klassen auf. ShutdownBsp
stellt
einen einfachen JFrame
als GUI und main()
bereit. Die Programmoberfläche besitzt hier lediglich die
Funktion, beim Schließen das Auslösen des Hooks zu
demonstrieren.
ShutdownThread
stellt die Thread
-Klasse
dar, die als Shutdown Hook fungiert. In ihr wird zur Demonstration
lediglich eine Konsolenausgabe getätigt. Innerhalb des
Konstruktors der GUI-Klasse wird die Laufzeitumgebung des Programms
durch Runtime.getRuntime()
ermittelt und dieser ein
Objekt des Threads hinzugefügt.
Startet man das Programm
öffnet sich nur das Fenster. Schließt man dies, so wird
der Hook gestartet. Man registriert dies an der Konsolenausgabe.
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class ShutdownBsp {
public ShutdownBsp() {
Runtime.getRuntime().addShutdownHook(new ShutdownThread());
JFrame frame = new JFrame("Shutdown Hook");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new ShutdownBsp());
}
}
class ShutdownThread extends Thread {
public void run() {
System.out.println("Programm wird geschlossen.");
}
}
Es ist durchaus möglich, auch mehrere Shutdown Hooks anzumelden. Man muss nur beachten, dass deren Ausführungsreihenfolge nicht vorhergesagt werden kann. Abhängigkeiten untereinander müssen somit vermieden werden.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.