| 

.NET C# Java Javascript Exception

2
Ich habe ein Java-Projekt übernommen, in welchem an verschiedenen Stellen per System.exit() die Ausführung beendet wird.
Nun will ich profilen, habe auch schon eine kleine statische Profiler-Klasse eingebaut, die an verschiedenen Checkpoints die aktuelle Laufzeit seit Start und letztem Checkpoint in Millisekunden mißt. Wenn das Programm aber per System.exit() aussteigt oder per Ctrl-C abgebrochen wird (ja, es ist ein reines Konsolenprogramm), wird der Profiler nicht mehr für den letzten Checkpoint aufgerufen ... und dann gibt er die Zusammenfassung nicht mehr aus. Ich könnte vor jedem System.exit() jetzt den letzten Profiler-Checkpoint aufrufen, aber das löst das Problem mit Ctrl-C nicht.

Gibt es eine Möglichkeit, eine Methode sozusagen "OnExit" aufzurufen?
News:
12.04.2011
Gast
21 1
2 Antworten
1
Ja, eine solche Möglichkeit gibt es, und sie nennt sich "shutdown hook". Ein Beispiel, wie man das einsetzt, findest Du hier.

Daneben möchte ich Dir aber auch nahelegen, über die Verwendung eines "richtigen" Profilers nachzudenken, statt Deinen Code von Hand zu instrumentieren. Beispiele wären JProfiler, JProbe und TPTP - mit einer Frage hier bei codekicker bekommst Du sicher auch Empfehlungen, welcher am besten für Dich passt.
12.04.2011
Matthias Hlawatsch 8,4k 2 8
0
Eine Anmerkung zu System.exit(0):

Die Beendigung eines Programms mit diesem Befehl und dem Paramter "0" ist ein schlechter Stil.

Mit System.exit soll generell das Programm mit allen Threads gestoppt werden. Dies ist in 2 Situationen sinnvoll:

- Fehlersituation
- Unsaubere Thread-Programmierung


Fehlersituation:
Es macht durchaus Sinn System.exit zu verwenden, aber dann mit einem speziellen Fehlercode 1, 2, 3, ...

Unsaubere Thread-Programmierung
Threads sauber beenden und das Programm einfach auslaufen lassen.
Oberflächenkomponenten mit dispose()-Methode deallokieren und abbauen, DEFAULT_CLOSING_OPERATION auf JFrame.DISPOSE setzen.

System.exit(0) riecht förmlich nach schlechter Programmierung. Als Sprungmarke wird damit der normale Kontrollfluss außer Kraft gesetzt. Außer als fail-save-Operation, falls es notwendig ist eine Programmversion zu deployen, die noch fehlerhaft mit Threads arbeitet und der kunde Druck macht, würde ich NIIIIEE System.exit(0) verwenden.
05.05.2011
oopexpert 290 7

Stelle deine Java-Frage jetzt!