Frage

Aus verschiedenen Gründen anrufen System.exit verpönt ist beim schreiben Java-Anwendungen, also, wie kann ich informieren Sie den aufrufenden Prozess, dass nicht alles läuft nach plan?

Edit: Die 1 ist eine standin für alle nicht-null-exit-code.

War es hilfreich?

Lösung

Die Verwendung von System.exit verpönt ist, wenn die "Anwendung" ist wirklich ein sub-Anwendung (z.B.servlet, applet) einer größeren Java-Anwendung (server):in diesem Fall wird die System.exit stoppen konnte die JVM und damit auch alle anderen sub-Anwendungen.In dieser situation, werfen eine entsprechende Ausnahme, die abgefangen und behandelt durch die Anwendung framework/server ist die beste option.

Wenn die java-Anwendung ist wirklich gemeint zu laufen als standalone-Anwendung, es ist nichts falsch mit der Verwendung System.exit.in diesem Fall, die Einstellung ein exit-Wert ist wahrscheinlich der einfachste (und auch am meisten verwendete) Art der Kommunikation scheitern oder Erfolg der Eltern-Prozess.

Andere Tipps

Ich Stimme mit "eine Ausnahme werfen"Menge.Ein Grund dafür ist, dass der Aufruf System.beenden lässt sich der code schwer zu verwenden, wenn Sie möchten, dass andere code in der Lage sein, es zu benutzen.Zum Beispiel, wenn Sie herausfinden, dass Ihre Klasse wäre es nützlich, aus einer web-app, oder irgendeine Art von Nachricht, die Konsum-app, wäre es schön zu ermöglichen, die Behälter die Gelegenheit zu deal mit die Fehler irgendwie.Ein container kann wollen, um den Vorgang zu wiederholen, zu entscheiden, zu melden und das problem ignorieren, senden Sie eine E-Mail an einen administrator, etc.

Eine Ausnahme wäre Ihre main() Methode;dies könnte die Ausnahme aufgefangen, und rufen Sie System.exit() mit einige Wert, können werden erkannt durch den aufrufenden Prozess oder ein shell-Skript.

System.exit() blockieren Sie, und erstellen Sie einen deadlock, wenn der thread, der Sie initiiert in einem shutdown-hook.

Es kann gefährlich sein / problematisch in der web-servlet-Umgebungen auch.

Eine Ausnahme gilt allgemein als die andere alternative.

Unsere Unternehmen Politik ist, dass es OK ist (sogar bevorzugt) zum Ruf-System.exit(-1), aber nur in der init () - Methoden.Ich würde auf jeden Fall zweimal überlegen, bevor Sie es, während ein Programm die normale Strömung.

Auslösen von Ausnahmen ist der beste Weg, um das senden von Informationen über einen bestimmten Fehler aus der app.

Einer Zahl nicht sagen, dich so viel wie:

Exception at thread 'main': FileNotFoundException "The file 'foo' doesn't exist"

(oder etwas in der Nähe)

Es ist verpönt, für normal beendet.Wenn "nicht alles läuft nach plan", wählen Sie dann System aus.die Ausfahrt ist in Ordnung.

Update:Ich sollte hinzufügen, dass, ich nehme an, Ihr '1' hat die Bedeutung, dass ist irgendwo dokumentiert.

Ich denke, eine Ausnahme zu werfen ist, was Sie tun sollten, wenn etwas schief geht.Auf diese Weise, wenn Ihre Anwendung nicht ausgeführt wird als stand-alone-app, die Anrufer darauf reagieren können und hat einige Informationen darüber, was falsch gelaufen ist.Es ist auch einfacher für debugging-Zwecke, da Sie auch eine bessere Vorstellung über das, was falsch gelaufen ist, wenn man einen stack-trace.

Eine wichtige Sache zu beachten ist, dass, wenn die Ausnahme-erreicht der obersten Ebene und damit bewirkt, dass die VM beenden der VM gibt einen return-code von 1, daher außen Anwendungen, verwenden Sie die return-code sehen, dass etwas falsch gelaufen ist.

Der einzige Fall, wo ich denke System.exit() sinnvoll ist, wenn die app soll aufgerufen werden, indem Sie Anwendungen, die Java nicht und müssen also mit der return-codes zu sehen, ob die app funktioniert oder nicht, und Sie möchten, dass diese Anwendungen eine chance zu haben, reagieren anders auf verschiedene Dinge schief gehen, d.h.Sie benötigen verschiedene return-codes.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top