System.exit(0);

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ich habe eine Probelem. Ich kann meine Software nicht beenden :-(

Über ein Menü führe ich folgende Aktion aus:

Code:
MenuItem mExit = new MenuItem("Beenden");
		    mExit.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent actionEvent) {
					stop();
					Logout();
					System.exit(0);
				}
			});

Die Funktionen stop() und Logout() laufen perfekt, anschließend rufe ich System.exit(0) auf. Nur leider werden nicht alle Threads beendet. Sondern anschließend laufen einige Threads weiter. Ich kann mir das nicht erklären.

Ich habe zusätzlich einen ShutDownHook implementiert, der auch ausgeführt wird beim System.exit(0) auch in diesem mache ich nochmal System.exit(0).

Hat jemand Erklärungsversuche?
 

Janus

Bekanntes Mitglied
wahrscheinlich blockiert dein zweiter exit aufruf. die vm wird also nicht beendet und deine threads rennen munter weiter.

kein anständiger code sollte System#exit verwenden.
 

Niki

Top Contributor
Normalerweise sollte die VM sauber beenden, in dem alle nicht-deamon Threads sauber beendet werden. Aber wie gesagt, bei GUIs sehe ich keine andere Lösung als mit System.exit(0); die Applikation zu beenden.
 

Niki

Top Contributor
Stimmt, habs gerade ausprobiert. Ich hätte gedacht dass der Event-Thread weiter läuft, auch wenn alle Fenster geschlossen sind.
 

Janus

Bekanntes Mitglied
Wolfram hat gesagt.:
Janus hat gesagt.:
kein anständiger code sollte System#exit verwenden.

Kannst Du das bitte erklären?

wenn man sich sein eigenes kleines progrämmchen zusammenfrickelt, kann es einem wahrscheinlich egal sein. aber sobald die möglichkeit besteht, dass fremde den code wiederverwenden, ist das harte beenden der VM eines der schlimmsten dinge, die man tun kann.

wenn ich fremden code verwende, dann erwarte ich, dass er anständig terminiert, oder zumindest "nur tote threads" hinterlässt. aber wenn mir so ein stück code die VM unterm arsch wegreisst, bin ich ziemlich aufgeschmissen.
 
S

SlaterB

Gast
na die Begründung ist ja ziemlich minderwertig,
genauso erwarte ich von jeder Bibliothek (z.B. Math.max()), dass nicht auf einmal ein Sound abgespielt, eine Log-Datei geschrieben, ein JFrame oder eine Internet-Connection geöffnet wird usw ;)
die Liste ist endlos, da ist System.exit() ja nur zufällig eines von tausenden Dingen
 

Wolfram

Mitglied
Janus hat gesagt.:
Wolfram hat gesagt.:
Janus hat gesagt.:
kein anständiger code sollte System#exit verwenden.

Kannst Du das bitte erklären?

wenn man sich sein eigenes kleines progrämmchen zusammenfrickelt, kann es einem wahrscheinlich egal sein. aber sobald die möglichkeit besteht, dass fremde den code wiederverwenden, ist das harte beenden der VM eines der schlimmsten dinge, die man tun kann.

wenn ich fremden code verwende, dann erwarte ich, dass er anständig terminiert, oder zumindest "nur tote threads" hinterlässt. aber wenn mir so ein stück code die VM unterm arsch wegreisst, bin ich ziemlich aufgeschmissen.

Hier haste die Antithese.

Jeder "anständig geschriebene Code" darf das System auf keinen Fall dauerhaft negativ beeinflussen (z.B. eine Datenbank zerstören), wenn er ohne Ankündigung terminiert wird. Andernfalls ist über die Zeit durch Crashes, Ausschalten etc. *gegeben*, dass der Code das System selbst kaputt macht.

Wenn ohnehin jeder Code sich bei plötzlichem zwangsweisen Beenden so Verhalten muss, dass das System nicht beeinträchtigt wird, kann ich das genau so gut auch regelmäßig tun.

Also, System.exit() FTW!

Und nun?
 

Janus

Bekanntes Mitglied
und nun?

Code:
public double sqrt( double value )
{
   if( value < 0 )
     System.exit( -1 );
   return Math.sqrt( value );
}

wundervolle funktion. was bin ich auch so plemplem und steck nen negativen skalar als parameter rein. die strafe folgt auf dem fusse.
 

Janus

Bekanntes Mitglied
Wolfram hat gesagt.:
Jeder "anständig geschriebene Code" darf das System auf keinen Fall dauerhaft negativ beeinflussen (z.B. eine Datenbank zerstören), wenn er ohne Ankündigung terminiert wird. Andernfalls ist über die Zeit durch Crashes, Ausschalten etc. *gegeben*, dass der Code das System selbst kaputt macht.

wäre schön, aber das ist eine anforderung, die nicht erfüllt werden kann. jede atomare transaktion benötigt eine zeitspanne, um vollständig ausgeführt zu werden. wenn du den prozess hart beendest, kann nicht garantiert werden, dass das system in einem gültigen zustand hinterlassen wird. man kann die gefahr reduzieren, aber niemals ganz eliminieren.
 
M

maki

Gast
System.exit(0)?

Bin dagegen, externe Ressourcen wie zB. Datenbankverbindungen etc. werden nicht zurückgegeben.

Auf einem Server ist System.exit(0) schon mal ganz falsch, auf richtigen Server sogar verboten(SecurityManager).

Sicherlich gibt es Anwedungsfälle für ein System.exit(), aber im allgemeinen bin ich dagegen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Programm beenden ohne System.exit() oder Runtime.exit() Java Basics - Anfänger-Themen 5
M Verwendung von System.exit(0) problematisch? Java Basics - Anfänger-Themen 1
R System.exit mit String als Rückgabedatentyp Java Basics - Anfänger-Themen 3
J Schleife und system.exit(); Java Basics - Anfänger-Themen 2
Guybrush Threepwood System.exit(int status) Java Basics - Anfänger-Themen 3
hdi System.exit() Status Code in Eclipse? Java Basics - Anfänger-Themen 2
J System.exit () frage Java Basics - Anfänger-Themen 3
S System.exit(0) oder was? Java Basics - Anfänger-Themen 16
A Programm ignoriert System.exit(0); Java Basics - Anfänger-Themen 10
G System.exit(0); Java Basics - Anfänger-Themen 6
K System.exit() - Konstanten ? Java Basics - Anfänger-Themen 2
G Unterschid von depose() und System.exit() Java Basics - Anfänger-Themen 5
L Ein JFrame schließen ohne System.exit(). Java Basics - Anfänger-Themen 4
C System.exit(int) und andere ähnliche Befehle Java Basics - Anfänger-Themen 5
E bedeutung d. übergabewertes bei System.exit Java Basics - Anfänger-Themen 2
D System.out.println Java Basics - Anfänger-Themen 1
O System.out.println wird nicht ausgegeben? Java Basics - Anfänger-Themen 11
paulen1 Methoden Unerwünschte Ausgabe bei System.out.print in For-Schleife Java Basics - Anfänger-Themen 8
M Keine Ausführung von System.out.println() Java Basics - Anfänger-Themen 3
O System.out array Java Basics - Anfänger-Themen 4
C System.out.println - Parameterübergabe funktioniert nicht Java Basics - Anfänger-Themen 2
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
H Befehl wird nicht ausgeführt - System.out.println Java Basics - Anfänger-Themen 3
C system cannot be resolved Fehler in Eclipse Java Basics - Anfänger-Themen 18
S Anweisungen verstehen System.out.print/println Java Basics - Anfänger-Themen 2
B Warum werden meine System.out.println's übersprungen? Java Basics - Anfänger-Themen 9
I System.currentTimeMillis() nutzen Java Basics - Anfänger-Themen 2
R Erste Schritte Eclipse - Java - System.out.println(); funktioniert nicht Java Basics - Anfänger-Themen 2
C System.in.read() Boolsche Werte vergleichen Java Basics - Anfänger-Themen 8
B Input/Output System.out.print mit und ohne "" Java Basics - Anfänger-Themen 5
T System.out.println() Java Basics - Anfänger-Themen 5
M System.property persistieren Java Basics - Anfänger-Themen 6
N (Java) Regristrierung und Login System mit einer Datenbank Java Basics - Anfänger-Themen 5
A Input/Output System.out Ausgabe aktualisieren, ohne Konsole vollzuspamen Java Basics - Anfänger-Themen 2
R Input/Output Frage zu System.out.println Java Basics - Anfänger-Themen 5
S System.out.printIn("Hello, World!"); Java Basics - Anfänger-Themen 3
A Passwort System Java Basics - Anfänger-Themen 4
N Input/Output System.in funktioniert nicht Java Basics - Anfänger-Themen 4
S Input/Output System.out.println - Manipulieren bzw. Alternative..? Java Basics - Anfänger-Themen 2
E Was ist die JRE System Library? Java Basics - Anfänger-Themen 3
V System.out.println zu JTextArea Java Basics - Anfänger-Themen 6
V OOP System.out.println(Objekt) Java Basics - Anfänger-Themen 3
D int x in System.out.println(), aber wie? Java Basics - Anfänger-Themen 1
J Variablen Komsiche System.in.read() return-value? Java Basics - Anfänger-Themen 3
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
N System Proxy verwenden Java Basics - Anfänger-Themen 0
C system.out.printf mit streams benutzen Java Basics - Anfänger-Themen 7
L system.print.out geht nicht Java Basics - Anfänger-Themen 11
D Ausgabe einer Matrix mit System.out.println Java Basics - Anfänger-Themen 6
F System kann die Datei nicht finden Java Basics - Anfänger-Themen 7
R ArrayList - System.out.println nur einmal, statt 10 mal Java Basics - Anfänger-Themen 5
D system.out.println >> JTextArea Java Basics - Anfänger-Themen 1
O Frage zu System.out.println() Java Basics - Anfänger-Themen 1
G System.out.printf geht nicht Java Basics - Anfänger-Themen 6
A System.out.println() - Aufbau Java Basics - Anfänger-Themen 1
D JDK installieren No JVM could be found on your system. Java Basics - Anfänger-Themen 9
Z System(einstellungen) per Java ändern/Steuern | Betriebssystembezogen Java Basics - Anfänger-Themen 7
M Variablen Ausgabe bei System.out.format? Java Basics - Anfänger-Themen 3
FrankR2 Grundsätzliches Verständnisproblem: Java 32/64-bit; Windows 7/8, 32/64-bit-System Java Basics - Anfänger-Themen 5
D kleines problem bei system.out.println schreibweise Java Basics - Anfänger-Themen 6
J Umgang mit System.out.println() und .print() Java Basics - Anfänger-Themen 6
W Input/Output System.in.read erzeugt nicht, was ich will Java Basics - Anfänger-Themen 1
C Input/Output System.in.read() gibt nicht -1 zurück? Java Basics - Anfänger-Themen 3
C Kleines Problem mit System.out.print Java Basics - Anfänger-Themen 1
G classname.System.out.println(); ? Java Basics - Anfänger-Themen 2
H Einfluss von System.out auf Programm Java Basics - Anfänger-Themen 2
K System.currentTimeMillis() und die Sommerzeit Java Basics - Anfänger-Themen 5
M Wann PATH und wann JAVA_HOME in Windows System 7 setzen? Java Basics - Anfänger-Themen 2
G Thread stoppen mit System.in.read() Java Basics - Anfänger-Themen 13
M CSV-File aus datei system einlesen Java Basics - Anfänger-Themen 3
R Char wird in System.out.print(); nicht ausgegeben Java Basics - Anfänger-Themen 6
T System.out.print : Frage zu Aufbau Java Basics - Anfänger-Themen 4
P Update System Java Basics - Anfänger-Themen 16
T If ; else error on system token delete Java Basics - Anfänger-Themen 5
M System.getProperty("java.vm.version") liefert build-Version Java Basics - Anfänger-Themen 4
O If in System.out.println Java Basics - Anfänger-Themen 11
J HILFE Benutzen einer Klasse aus JRE System Library Java Basics - Anfänger-Themen 4
T Erste Schritte import java.lang.System.out Java Basics - Anfänger-Themen 4
N Erste Schritte Ausgabe in System.out Java Basics - Anfänger-Themen 13
D Scanner(System.in) Schleife Java Basics - Anfänger-Themen 7
G Input/Output System.in.read & Scanner Java Basics - Anfänger-Themen 2
H System.out umleiten Java Basics - Anfänger-Themen 5
J Erste Schritte System.out.print (Fehlermeldung) Java Basics - Anfänger-Themen 14
C System.out in String schreiben Java Basics - Anfänger-Themen 2
P System - Tage erkennen ( System Time ?) Java Basics - Anfänger-Themen 3
lulas[]args Alternative zu System.err.println(); Java Basics - Anfänger-Themen 5
X Eclipse System.out.print fehler Java Basics - Anfänger-Themen 5
K char-int-Addition in System.out.print Java Basics - Anfänger-Themen 3
O Tabelle Formatieren mit system.out.format Java Basics - Anfänger-Themen 11
F System.getProperty("line.separator") funkt. nicht Java Basics - Anfänger-Themen 4
N Erste Schritte System.err und System.out Java Basics - Anfänger-Themen 5
Z System.out.format, Hilfe. Java Basics - Anfänger-Themen 14
C System.out.println Java Basics - Anfänger-Themen 4
G Input/Output System.err zusätzlich in Datei schreiben Java Basics - Anfänger-Themen 27
A Problem beim Ausführen einer .jar datei auf externen System Java Basics - Anfänger-Themen 5
S Input/Output Neuen InputStream System.in setzen Java Basics - Anfänger-Themen 11
I Input/Output System.out.println formatierung? möglich? Java Basics - Anfänger-Themen 2
ruutaiokwu System.err.print(ln) macht ein durcheinander??! Java Basics - Anfänger-Themen 8
D Frage zu System.out.println() Funktion Java Basics - Anfänger-Themen 6
J System.out - Zwischenablage Java Basics - Anfänger-Themen 5

Ähnliche Java Themen


Oben