# java.awt Vollbild beenden



## GastTheta7 (15. Dez 2007)

Hi Leute!

Hiermit kann ich erfolgreich in den Vollbildmodus schalten...


```
public class Test {

  public static void main(String[] args) {
    GUI gui= new GUI();
  }
}
```



```
public class GUI extends Frame implements KeyListener 
{
  private static GraphicsEnvironment s_graphicsEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();
  private static GraphicsDevice s_graphicsDev = s_graphicsEnv.getDefaultScreenDevice();

	
  public GUI() {
    super(s_graphicsDev.getDefaultConfiguration());

    setUndecorated(true); 
    setIgnoreRepaint(true); 
    setResizable(false);
    addKeyListener(this);

    s_graphicsDev.setFullScreenWindow(this);
       				
    setVisible(true);		
  }
	

	
  public void keyPressed(KeyEvent e) 
  {
    if (e.getKeyCode() == KeyEvent.VK_ESCAPE) 
    { 
       setVisible(false);
       s_graphicsDev.setFullScreenWindow(null);
    }		
  }

}
```


...aber wenn ich dann Escape drücke und damit *keyPressed()*
aufrufe, dann wird mir in *s_graphicsDev.setFullScreenWindow(null)*
folgende Exception geschmissen:



> Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Invalid display mode
> at sun.awt.Win32GraphicsDevice.setDisplayMode(Win32GraphicsDevice.java:431)
> at sun.awt.Win32GraphicsDevice.setFullScreenWindow(Win32GraphicsDevice.java:344)
> at app.GUI.terminate(GUI.java:64)
> ...




Aber eigentlich ist das doch der richtige Weg um den Vollbildmodus
wieder zu beenden... =/

Ich hoffe Ihr könnt mir helfen!
Danke!

Gruß


----------



## GastTheta7 (16. Dez 2007)

mhm hat niemand eine Idee?


----------



## mikachu (17. Dez 2007)

setFullScreenWindow(java.awt.Window)
Enter full-screen mode, or return to windowed mode. The entered full-screen mode may be either exclusive or simulated. Exclusive mode is only available if isFullScreenSupported returns true....

warum übergibst du in der keyPressed()-methode der methode setFullScreenWindow() ein null, und kein Window-Objekt?

#edit 1:
btw, als du den post erstelltest, ist wochenende gewesen 

#edit 2:
API-Doc lesen war auch bis vor nem halben jahr nie meine stärke, man erspart sich aber ne menge ärger, wenn man die api-dox ließe


----------



## GastTheta7 (17. Dez 2007)

Ich hab die API gelesen:



> Parameters:
> w - a window to use as the full-screen window; null if returning to windowed mode.


----------



## mikachu (17. Dez 2007)

kannst du mal den link zur api-doc posten?

#edit 1:
ok, habs...

welche Java-version nutzt du? mein post bezog sich auf Java 6!

#edit 2:
damn, das ist auch in Java 6 so... vergiss meine posts 

#edit 3:
ok, versuch mal, die anweisungen in der keyPressed()-methode zu vertauschen, also erst setFullScreenWindow(null) und anschließend setVisible( false );

#edit 4:
es ist mir auch grad etwas unklar, warum du erst auf nicht-sichtbar schaltest und danach noch die applikation auf windowed zurücknehmen willst ???:L ( es ist ja nicht mehr sichtbar )


----------



## GastTheta7 (17. Dez 2007)

Hi!

Das Vertauschen hilft leider nichts!  Hatte ich schon probiert,
ich hab mittlerweile alles mögliche probiert. In einem anderen
Forum meinte jemand das mein Code bei seinem Linux 32bit
läuft...nur bei meinem Vista x64 offenbar nicht =/

Mhm....vielleicht ein bug...


----------



## DeeDee0815 (19. Dez 2007)

Hi GastTheta7,

das ist kein Bug: Hatte eben ein ähnliches Problem. (Deshalb bin ich übrigens auf diesen Thread gestoßen.) Ich habe zum verlassen des Vollbildmoduses das Fenster erstmal disposed. Danach habe ich es wieder dekoriert, dann in der größe veränderbar und schließlich wieder visible gemacht.

```
private JFrame window;

private Dimension windowSize;

private Point windowLocation;

public void setFullScreen(boolean full) {
	if (full) {
		windowSize = new Dimension(window.getWidth(), window.getHeight());
		windowLocation = window.getLocation();
		window.dispose();
		window.setUndecorated(true);
		window.setResizable(false);
		GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(window);
		window.setVisible(true);
	} else {
		window.dispose();
		window.setUndecorated(false);
		window.setResizable(true);
		GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(window);
		window.setVisible(true);
		window.setSize(windowSize);
		window.setLocation(windowLocation);
	}
	window.repaint();
}
```

MfG
DeeDee0815

P.S.: Dem ein oder anderen mag es vielleicht merkwürdig vorkommen, dass ich GraphicsEnvironment.get... und einige andere Methoden sozusagen doppelt aufrufe: Also jeweils in den beiden Verzweigungen der if-Abfrage. Das geht aber nicht anders: Schreibt man jene Methoden vor oder hinter die if-Abfrage gibt's Probleme. Könnt ihr ja mal testen. Auch das repaint() mag merkwürdig erscheinen: Schaltet man das Fenster aber zum Beispiel per Tastenkombination in den Vollbildmodus, würde, im Gegensatz zu einem Button, das Fenster nicht neu gezeichnet werden und nicht richtig dargestellt werden. :meld:


----------

