Serverprogramm aus Console beenden (Event ?)

Hallo,

mein Java-Serverprogramm läuft in der Console. Es hat keinen GUI und kann somit nur beendet werden wenn man in der Console +C drückt.

Wie kann ich nun in meinem Server dieses Event abfangen um ihn vielleicht doch anständig zu beenden z.B. noch offene Datenbankverbindungen zu schließen.

Danke
Albert

Hallo,

nach dem Starten des Servers, kannst du einen Thread hinterlegen, der dies übernimmt

Runtime.getRuntime().addShutdownHook(new Thread(){
 public void run(){
 //TODO: Close all Resources
 }
 });

Jedoch solltest du beachten, dass dieser nicht zu lange läuft, da sonst die VM gekillt wird.

LG Matthias

Danke für die Antwort.

Gibt es noch eine andere Möglichkeit ?
Der Server soll u.U. mehrere Tage laufen und nicht zwischenzeitlich sterben. Somit ist der Vorschlag von Dir wohl nicht ganz passend.

Hast Du noch eine Idee ?

Danke
Albert

Ähm… ich denke du hast nicht ganz verstanden!

Der Shutdownhook ist ein Thread der beim beenden der VM gestartet wird, also in deinem Fall genau das richtige!

Was ich dir sagen wollte, ist, dass der Thread nicht zu lange laufen darf z.b. um Dateien zu sichern, Statistiken zu schreiben etc. da es wenn zu viel zeit zwischen dem drücken von STRG+C in der Console und dem beenden dieses Threads zu viel Zeit liegt, sein kann, dass dieser Thread vorzeitig beendet wird!

Ich denke ein kleiner Blick in die API hätte dir auch geholfen.
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Ru…
sonst fällt mir auch keine Lösung ein

Noch viel Glück
Matthias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]