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 .
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....
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.
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?
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:
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:
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.