Konsole beendet - Programm kontrolliert runter fahren

bliet

Mitglied
Hallo alle zusammen,

ich habe ein Konsolenprogramm geschrieben.
Das Programm läuft unter Windows. Nun wollte ich es verhindern, dass das Programm mitten drin abgebrochen wird, wenn die Konsole mittels Mausklick auf X geschlossen wird.
Per Google kam ich auf ShutdownHooks.

Grobe Skizze:
Java:
public class MainProg {
   static long run = true;

   public static void main(String[] args) {
      addDaemonShutdownHook();
      while(run){
         doSomething();
      }
   }

   static protected void addDaemonShutdownHook() {
        Runtime.getRuntime().addShutdownHook(new Thread() {            
            @Override
            public void run() {
            	
                try {
                	run = false;
            }
        });
    }
}

Nun müsste ich ja noch irgendwie sagen, dass gewartet werden soll, bis die Methoe doSomethind() fertig ist.
Wie bekomme ich das hin?
Bin ich überhaupt auf den richtigen weg?

Danke für eure Hilfe.
MfG
bliet
 

Kevin94

Top Contributor
Du bist auf jeden Fall auf dem richigen Weg, wenn es geht, dann mit einem ShutdownHook. Wie immer hilft bei Unklarheiten ein Blick in die API:
Runtime#addShutdownHook(java.lang.Thread) hat gesagt.:
A shutdown hook is simply an initialized but unstarted thread. When the virtual machine begins its shutdown sequence it will start all registered shutdown hooks in some unspecified order and let them run concurrently. When all the hooks have finished it will then run all uninvoked finalizers if finalization-on-exit has been enabled. Finally, the virtual machine will halt. Note that daemon threads will continue to run during the shutdown sequence, as will non-daemon threads if shutdown was initiated by invoking the exit method.
Soll heisen, dass dein main-Thread schon beendet wurde, wenn die VM aus einem anderen Grund als System.exit beendet wurde. Wenn das ganze aber in einem Deamon-Thread starten würde, würde der Deamon-Thread auf jeden Fall weiterlaufen, ich denke also das folgendes funktionieren sollte:

Java:
public class MainProg {
   static long run = true;
   static Thread t;
   
   public static void main(String[] args) {
      addDaemonShutdownHook();
      t=new Thread(){
      while(run){
         doSomething();
      }};
      t.setDeamon(true);
      t.start();
      t.join();
   }
 
   static protected void addDaemonShutdownHook() {
        Runtime.getRuntime().addShutdownHook(new Thread() {            
            @Override
            public void run() {
                   run = false;
                   t.join;
        });
    }
}
 

bliet

Mitglied
Hier jetzt mal ein KSKB

Java:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;


public class main {	
	static boolean run = true;
	static Thread t;
	
	public static void main(String[] args) {
		addDaemonShutdownHook();
		t = new Thread(){
			@Override
			public void run() {
				File file = new File("test.txt");
				try {
					FileWriter writer = new FileWriter(file, false);
					
					while(run){
						for(int i = 0; i < 10000; i++){
							System.out.println(i);
							writer.write(""+i);
							writer.write(System.getProperty("line.separator"));
						}
					}
					
					writer.flush();
					writer.close();
				} catch (IOException e) {
					e.printStackTrace();
				} 
				
				
			}
		};
		
		t.setDaemon(true);
		t.start();
		try {
			t.join();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	static protected void addDaemonShutdownHook() {
        Runtime.getRuntime().addShutdownHook(new Thread() {            
            @Override
            public void run() {
                   run = false;
                   try {
					t.join();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
            }
        });
	}
}

Scheint zu funktionieren. Danke.
Werde es dann mal in mein richtiges Programm einbauen, und schauen, ob es dort auch läuft.

MfG
bliet
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1
M Mein quellcode wird nicht in der Konsole ausgegeben Java Basics - Anfänger-Themen 3
M Nicht genug Eingabemöglichkeiten in der Konsole Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
W char über die Konsole? Java Basics - Anfänger-Themen 7
J if-Schleife innerhalb einer if-Schleife wird in der Konsole nicht gelesen Java Basics - Anfänger-Themen 4
W Werte durch Konsole einlesen Java Basics - Anfänger-Themen 10
I 12 Spalten von jeweils 30 Zahlen in Konsole ausgeben Java Basics - Anfänger-Themen 6
I Java auf der Konsole Java Basics - Anfänger-Themen 5
C Erste Schritte Muster ausgeben in der Konsole - großes V Java Basics - Anfänger-Themen 5
K Ausgaben auf der Konsole (static Varible) Java Basics - Anfänger-Themen 9
S Tastatureingabe auslesen und in Konsole ausgeben Java Basics - Anfänger-Themen 6
C Ausgabe in der Konsole Java Basics - Anfänger-Themen 11
Zrebna Programm kann aus der Konsole nicht gestartet werden (in der IDE läuft es) Java Basics - Anfänger-Themen 2
J Konsole Java Basics - Anfänger-Themen 10
V Umgebungsvariable Genutzte Javaversion in der Konsole ändern Java Basics - Anfänger-Themen 5
N Tabelle schön in der Konsole ausgeben Java Basics - Anfänger-Themen 5
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
D Tabelle in der Konsole Java Basics - Anfänger-Themen 3
J Gefilterten Stream über die Konsole ausgeben Java Basics - Anfänger-Themen 1
F Java auf Windows Konsole ausführen Java Basics - Anfänger-Themen 1
P Array einlesen von Konsole Java Basics - Anfänger-Themen 8
A Programm in Konsole Java Basics - Anfänger-Themen 4
I OOP Objektnamen über die Konsole richtig einlesen Java Basics - Anfänger-Themen 9
Bun17 Keine Ausgabe in der Konsole Java Basics - Anfänger-Themen 2
L Input/Output Wurzelzeichen in der Konsole ausgeben | Brauche Hilfe Java Basics - Anfänger-Themen 6
E Compiler-Fehler Javac Windows vs Ubuntu /Script vs Konsole Java Basics - Anfänger-Themen 4
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
A Input/Output System.out Ausgabe aktualisieren, ohne Konsole vollzuspamen Java Basics - Anfänger-Themen 2
M Arrays auf Konsole formatiert ausgeben Java Basics - Anfänger-Themen 7
L Input/Output Konsole in Farben schreiben Java Basics - Anfänger-Themen 4
BlueFox Tabelle in der Konsole ausgeben - Probleme Java Basics - Anfänger-Themen 1
O Erste Schritte Scanner mehrere male benutzen (Konsole) Java Basics - Anfänger-Themen 7
O Etwas auf der Konsole ausgeben, usw. Java Basics - Anfänger-Themen 22
A Input/Output Prozess Output genauso in der Konsole ausgeben Java Basics - Anfänger-Themen 0
J Input/Output javac HelloWorld.java - Keine Textausgabe in der Konsole Java Basics - Anfänger-Themen 4
T Methoden Methode wird nicht auf Konsole ausgeführt Java Basics - Anfänger-Themen 3
T In Konsole darf nichts falsches eingetippt werden?! Java Basics - Anfänger-Themen 7
E Wie Passwort-Eingabe (ohne Echo!) über Konsole ? Java Basics - Anfänger-Themen 4
G Probleme mit Konsole Java Basics - Anfänger-Themen 4
J Zahlen aus Konsole einlesen Java Basics - Anfänger-Themen 1
C Input/Output Ein Spielbrett auf Konsole ausgeben Java Basics - Anfänger-Themen 2
T Datum wird auf der Konsole richtig ausgegeben, aber im Textarea kommt ERROR Java Basics - Anfänger-Themen 8
F Wert in Linux auf die Konsole schreiben Java Basics - Anfänger-Themen 3
C Input/Output Einlesen von der Konsole mit InputStreamReader Java Basics - Anfänger-Themen 13
C Tannenbaum auf der Konsole ausgeben lassen Java Basics - Anfänger-Themen 12
Z AWT package -> keine Konsole? Java Basics - Anfänger-Themen 2
P Einlesen von der Konsole Java Basics - Anfänger-Themen 3
J Programm wird nicht auf der Konsole ausgeführt Java Basics - Anfänger-Themen 2
E Muster auf der Konsole ausgeben lassen (Schleifen) Java Basics - Anfänger-Themen 7
L Dialogbox statt Konsole verwenden Java Basics - Anfänger-Themen 5
B Konsole schließt sich sofort Java Basics - Anfänger-Themen 8
M Fortlaufende Konsole Java Basics - Anfänger-Themen 3
G Konsole gibt "alte" sachen aus Java Basics - Anfänger-Themen 3
L Konsole öffnen und Java Programm darin ausführen Java Basics - Anfänger-Themen 4
S Konsole Lanterna in NetBeans einbinden Java Basics - Anfänger-Themen 5
J ausgaben von der konsole in das fenster Java Basics - Anfänger-Themen 5
E Input/Output Konsole erkennt meinen Buchstaben nicht Java Basics - Anfänger-Themen 12
F String wird in Konsole nicht eingelesen Java Basics - Anfänger-Themen 19
A Objekte einer ArrayList auslesen und auf der Konsole ausgeben Java Basics - Anfänger-Themen 2
J Ausgabe auf der Konsole formatieren. Java Basics - Anfänger-Themen 6
T Konsole gibt nicht das Gewünschte aus Java Basics - Anfänger-Themen 5
N Mit Java Befehle auf Konsole ausführen Java Basics - Anfänger-Themen 4
M Input/Output Zeichen on Konsole einlesen Java Basics - Anfänger-Themen 3
S Erste Schritte Konsole leeren Java Basics - Anfänger-Themen 3
N String in Konsole schreiben?! Java Basics - Anfänger-Themen 2
S Beliebigen Tastendruck "einlesen" (ohne Konsole) Java Basics - Anfänger-Themen 3
F String wird richtig in konsole geschrieben aber falsch an Methode übergeben Java Basics - Anfänger-Themen 8
T Text auf der Konsole farbig machen Java Basics - Anfänger-Themen 6
OnDemand Applikation öffnen mit Konsole Java Basics - Anfänger-Themen 17
R Nach Ubuntu-Update: Konsole spuckt bei neu Kompilierten Programmen Fehler aus (BlueJ)(Ubuntu12.04) Java Basics - Anfänger-Themen 11
O Konsole - Kleine Frage Java Basics - Anfänger-Themen 22
O Bereits "gepostete" Strings in der Konsole verändern? Java Basics - Anfänger-Themen 2
T Parameter in Eigner Konsole Java Basics - Anfänger-Themen 2
B Erste Schritte Text in Konsole farbig ausgeben Java Basics - Anfänger-Themen 3
T Konsole leeren? Java Basics - Anfänger-Themen 7
K Methoden Einlesen einer unbegrenzten Matrix über Konsole Java Basics - Anfänger-Themen 6
S Programm läuft in Eclipse, aber nicht über Konsole Java Basics - Anfänger-Themen 10
E Keine Ausgabe der Konsole Java Basics - Anfänger-Themen 4
OnDemand Anführungszeichen im String werden als incompatible in der Konsole ausgegeben Java Basics - Anfänger-Themen 3
J Java Daten von Konsole einlesen (Spezielles Problem) Java Basics - Anfänger-Themen 6
D Erste Schritte Java Konsole öffnet sich nicht Java Basics - Anfänger-Themen 4
S Konsole schließen, nachdem Jar läuft Java Basics - Anfänger-Themen 5
H Exit Befehl in eigener Konsole Java Basics - Anfänger-Themen 9
Luk10 Exception beim Ausführen per Konsole Java Basics - Anfänger-Themen 6
S Konsole work time Java Basics - Anfänger-Themen 9
S runable jar in der Konsole Java Basics - Anfänger-Themen 2
D Konsole leeren? Java Basics - Anfänger-Themen 5
K javac in der konsole Java Basics - Anfänger-Themen 4
N Logger-Ausgabe und die Konsole Java Basics - Anfänger-Themen 4
S Erste Schritte Java Konsole öffnen ohne Sysout. Java Basics - Anfänger-Themen 3
masii Spielfeld auf Konsole ausgeben Java Basics - Anfänger-Themen 3
D jar datei nur über konsole ausführbar Java Basics - Anfänger-Themen 4
C Minesweeper mit Arrays über Konsole Java Basics - Anfänger-Themen 4
S Ausgabe auf Konsole nummerieren Java Basics - Anfänger-Themen 2
U jar funktioniert nur über konsole Java Basics - Anfänger-Themen 4
L Konsole und packages Java Basics - Anfänger-Themen 8
M Maskierte Eingaben in der Konsole? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben