# System.exit(0); ausführen, wenn letztes Fenster geschlossen



## pc-world (10. Jun 2008)

Ich habe mehrere Fenster.
Durch die Anweisung 
	
	
	
	





```
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
```
 wird ja der Prozess gekillt, wenn das Fenster geschlossen wird.
Doch wie mache ich es, dass der Prozess erst gekillt wird (also 
	
	
	
	





```
System.exit(0);
```
), wenn das *letzte* Fenster geschlossen wird?

Gibt es da was in der API oder muss ich da selber einen Fensterzähler erstellen?


----------



## Gast (10. Jun 2008)

gibts noch nichts, macht auch wenig sinn. programme die wirr fenster öffnen sind pfui.


----------



## pc-world (10. Jun 2008)

Gast hat gesagt.:
			
		

> gibts noch nichts, macht auch wenig sinn. programme die wirr fenster öffnen sind pfui.



Dast stimmt, das nervt wirklich.
Sollte ich das mit _JTabbedPane _lösen (es muss auf mehrere _Fenster_ zugegriffen werden können)? Das alles mit _JDialogs _zu machen, wäre Unsinn...


----------



## Krondor (11. Jun 2008)

Hi probiers mal hiermit:


```
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;


public class CloseWindow 
extends JFrame
implements WindowListener {

	private static int counter = 0;
	
	public CloseWindow() {
		addWindowListener(this);
		counter++;
		setSize(100, 100);
		setVisible(true);
	}
	
	@Override
	public void windowActivated(WindowEvent arg0) {}

	@Override
	public void windowClosed(WindowEvent arg0) {}

	@Override
	public void windowClosing(WindowEvent arg0) {
		counter--;
		if(counter <= 0) {
			System.exit(1);
		}
	}

	@Override
	public void windowDeactivated(WindowEvent arg0) {}

	@Override
	public void windowDeiconified(WindowEvent arg0) {}

	@Override
	public void windowIconified(WindowEvent arg0) {}

	@Override
	public void windowOpened(WindowEvent arg0) {}

	public static void main(String[] args) {
		for(int i=0;i<5;i++) {
			new CloseWindow();
		}
	}
}
```

Gefällt zwar vielleicht nicht jedem aber hilft dir vielleicht weiter 
Einfach statt dem JFrame das CloseWindow benutzen. (kannste auch gerne umbenennen ist mir kein dümmerer Name eingefallen !  )

Achso und zur richtigen Benutzung würde ich oben das "setSize", das "setVisible" und die Main-Methode rausschmeißen


----------



## The_S (11. Jun 2008)

```
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
```


----------



## Guest (11. Jun 2008)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> ```
> setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
> ```



ja cool, und das programm läuft im hintergrund weiter...


----------



## The_S (11. Jun 2008)

Anonymous hat gesagt.:
			
		

> ja cool, und das programm läuft im hintergrund weiter...



nein


----------



## Illuvatar (11. Jun 2008)

Wenn das letzte Fenster disposed ist, hört das Programm auf. Außer du startest irgendwelche nicht-daemon-Threads.


----------



## pc-world (11. Jun 2008)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> ```
> setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
> ```



Das hat bei mir auch nicht funktioniert (ich starte KEINE Extra-Threads).


----------



## pc-world (11. Jun 2008)

Krondor hat gesagt.:
			
		

> Hi probiers mal hiermit:
> 
> 
> ```
> ...



Danke, funktioniert *bestens*!


----------



## The_S (12. Jun 2008)

pc-world hat gesagt.:
			
		

> Das hat bei mir auch nicht funktioniert (ich starte KEINE Extra-Threads).



Ich weiß ja nicht was du für eine komische VM hast, aber bei mir (und überall anders) funktionierts :roll:


```
public class Test {

	public static void main(String[] args) {
		
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frame.setSize(400, 300);
		JTextArea area = new JTextArea();
		frame.getContentPane().add(area);
		frame.setVisible(true);
	}
}
```

Wenn du deinen Code zeigst, kann ich dir vermutlich auch sagen, was du falsch gemacht hast  .


----------

