System.exit(0) oder was?

Status
Nicht offen für weitere Antworten.

Souljacker

Mitglied
Hi!

Vor kurzem hat unser Prof in der Vorlesung am
Code:
System.exit(0);
gemosert. Da wird ja die VM beendet und das kann bei bestimmten Anwendungen (z. B. Webserver) problematisch sein. Aber entweder hat der Prof keine Alternative vorgestellt, oder ich hab grad geschlafen :oops: .

Gibts da Alternativen? Wenn ja, welche?
 

Marco13

Top Contributor
Ein Programm sollte i.a. auf einem "vorgegebenen" Weg zu einem Ende kommen. Ein "Hello World" enthält ja auch kein System.exit: Nach der main ist das Programm zuende....
 

moormaster

Top Contributor
Ja, einfach alle aktiven Threads (inkl. dem, der die main() Methode ausführt) zu ende laufen lassen, dann beendet sich auch die VM.

Das heisst also, du musst nur die main-Funktion verlassen und alle Threads, die du selber angelegt hast, zum Ende bringen. Wenn deine Anwendung eine grafische Benutzeroberfläche hat, dann wird dort auch ein mindestens ein Thread angelegt. Diese GUI-Threads sollten sich beenden, sobald alle Frames / JFrames mit einem dispose()-Aufruf vernichtet wurden.
 

Souljacker

Mitglied
Okay klingt einleuchtend, aber wenn ich jetzt z. B. eine switch-Anweisung zur Programmsteuerung benutze...also wenn ich in die Konsole "quit" eintippe, wie soll ich das Programm dann beenden?
 
S

SlaterB

Gast
eine solche Steuerung verwendet doch eine Schleife,
bei quit die Schleife verlassen/ die aktuelle Methode mit return; verlassen oder so
 

Souljacker

Mitglied
Hmmm, eine switch-Anweisung ist doch eigentlich ein Spezialfall der if-Anweisung, also eigentlich eine Fallunterscheidung. Also ich meine ich möchte das Programm mittels Eingabe von "quit" komplett beenden/verlassen. Geht das überhaupt ohne das
Code:
System.exit(0)
-Statement?

Also nicht aus einer Methode raus...oder versteh ich dich falsch SlaterB?

Ich hab in meinem Skript nachgesehen und da wird diese Art der Programm-Beendung als unsicher bezeichnet. Ich
nehme an, es könnte damit eben Schabernack getrieben werden...z.B. den oben genannten Webserver komplett beenden oder so... :idea:
 
M

maki

Gast
>> Geht das überhaupt ohne das ....

Wurde doch jetzt schon mehrfach erklärt.

Zeig mal deinen Code.
 

Der Müde Joe

Top Contributor
Souljacker hat gesagt.:
Also ich meine ich möchte das Programm mittels Eingabe von "quit" komplett beenden/verlassen. Geht das überhaupt ohne das

Code:
import java.util.Scanner;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		String next;
		while ((next = scanner.next()) != null) {
			if ("quit".equals(next)) {
				break; //naja...nicht grad schön...aber ok
			} else {
				System.out.println("hallo " + next);
			}
		}
		System.out.println("bye bye...");
	}
}

klar. Wenn alle Threads welche nicht deamons sind beendet sind, ist das Progamme fertig.
 
S

SlaterB

Gast
zum switch alleine kann man wenig sagen, wichtig ist, wo es steht, wer es wann wie aufruft

ich dachte an:

[code-Block den Der Müde Joe jetzt schon besser geschrieben hat ;) ]



wenn dein Programm anders aussieht, dann musst du das schon näher erklären,
überall gibts einen bestimmten Weg,

ganz falsch kann
System.exit(0);
übrigens nicht sein, schließlich gibt es JFrame.EXIT_ON_CLOSE,
welches das auch letztlich aufruft,

aber dispose() soll bei graphischen Oberflächen auch gehen, das wäre dann wohl wieder die saubere Variante
 

Souljacker

Mitglied
Also eine graphische Oberfläche hab ich jetzt nicht...

Hier mein Code für meine main-methode:
Code:
public static void main(String[] args) throws IOException {
        
        BufferedReader input = new BufferedReader(new InputStreamReader(
                System.in));

        PlayingField game = new PlayingField();
        
        boolean quit = false;

        while (!quit) {
            System.out.print(PROMPT);
            String currLine = input.readLine();
            StringTokenizer inStream = new StringTokenizer(currLine);
            
            // For empty input
            if (input == null) {
                break;
            }

            if (inStream.hasMoreTokens()) {
                String command = inStream.nextToken();

                switch (command.toUpperCase().charAt(0)) {
                case 'H':
                    // Displays command overview
                    helpMessage commands = new helpMessage();
                    commands.help();
                    break;
                case 'Q':
                    // Quits the programm
                    System.exit(0);
                default:
                    System.out.println("Error! Unknown command!"
                            + " Type <h> for help!");
                    break;
                }
            }
        }
    }

Die anderen case-Fälle hab ich jetzt mal rausgenommen, nicht das ich noch Probleme in der Uni krieg, wenn hier einer drüber stolpert...

Ja das System.exit(0) nicht ganz falsch sein kann dachte ich mir, weil ichs bis jetzt eigentlich immer so gemacht hab...und keiner hat sich beschwert! :lol:
 

Der Müde Joe

Top Contributor
by the way:

StringTokenizer sollte man nicht mehr benutzen.

Code:
while (!quit) {
	String currLine = input.readLine();
	// For empty input
	if (input == null) {
		break;
	}
	char[] cs = currLine.toUpperCase().toCharArray();
	
	for(char c : cs) {
		switch (c) {
		//...
		}
	}
}

EDIT: sehe grad ist gar nicht dasselbe...

also gleich so
Code:
while (!quit) {
	String currLine = input.readLine();
	// For empty input
	if (input == null) {
		break;
	}
	switch (currLine.toUpperCase().charAt(0)) {
	// ...
	}
}
 

Souljacker

Mitglied
Kommt glaub ich von Sun.

Ich hab in der API folgendes gefunden:

StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
 
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
A Programm ignoriert System.exit(0); Java Basics - Anfänger-Themen 10
G System.exit(0); Java Basics - Anfänger-Themen 12
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