Schwierigkeiten mit Fullscreen API

Status
Nicht offen für weitere Antworten.

hdi

Top Contributor
Hallo,
ich versuche gerade gemäß dem Sun Tutorial über den Fullscreen Mode einen Test zu schreiben. Soweit ich sehe passiert in meinem Code eig. das gleiche wie in Sun's Bsp, allerdings funktioniert es nicht. Sun's Bsp dahingegen funktioniert. Ich sehe aber den Fehler nicht...

Das Bsp das ich adaptiere ist dieses.

Bei meinem Code swicht er in den Fullscreen Mode, aber der Bildschirm bleibt schwarz bzw. dunkelgrau. Außerdem passiert es manchmal dass ich ihn gar nicht mehr verlassen kann. Weder mit ESCAPE, obwohl ich am Fenster nen KeyListener habe, noch mit ALT+F4 oder Affengriff. Ich muss dann rebooten...
Also Vorsicht falls ihr mein Bsp starten wollt!

Hier nun mein Code:

Java:
import java.awt.DisplayMode;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;

public class Main {

	public static void main(String[] args) {

		GraphicsDevice monitor = GraphicsEnvironment
				.getLocalGraphicsEnvironment().getDefaultScreenDevice();
		MyWindow window = new MyWindow(monitor);

		try {
			monitor.setFullScreenWindow(window);
			monitor.setDisplayMode(new DisplayMode(1024, 768, 32,
					DisplayMode.REFRESH_RATE_UNKNOWN));
			window.createBufferStrategy(2);
			new Game(window).start();
			
		} catch (IllegalArgumentException e) {
			System.out.println("Display mode not supported");
			System.exit(-1);
		} catch (UnsupportedOperationException e) {
			System.out.println("Display mode cannot be changed");
			System.exit(-1);
		}

		finally {
			monitor.setFullScreenWindow(null);
		}
	}

}

Java:
import java.awt.Frame;
import java.awt.GraphicsDevice;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class MyWindow extends Frame {

	public MyWindow(final GraphicsDevice monitor) {
		super(monitor.getDefaultConfiguration());
		setUndecorated(true);
		setResizable(false);
		setIgnoreRepaint(true);


		addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
					monitor.setFullScreenWindow(null);
					System.exit(0);
				}
			}
		});
	}
}

Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Window;
import java.awt.image.BufferStrategy;
import java.util.Random;

public class Game extends Thread {

	private Window window;

	public Game(Window window) {
		this.window = window;
	}

	@Override
	public void run() {
		while (true) {
			BufferStrategy bufferStrategy = window.getBufferStrategy();
			for (int i = 0; i < 2; i++) { // 2 buffers
				Graphics g = bufferStrategy.getDrawGraphics();
				if (!bufferStrategy.contentsLost()) {
					Random r = new Random();
					g.setColor(new Color(r.nextInt(255), r.nextInt(255), r
							.nextInt(255)));
					g.fillRect(0, 0, window.getWidth(), window.getHeight());
					bufferStrategy.show();
					g.dispose();
				}

				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
				}
			}

		}
	}
}

Was mach ich falsch? Danke!
 
S

Spacerat

Gast
Kann mich dunkel dran erinnern, das ich das Problem auch schon mal hatte. Woran es genau lag weis ich nicht. Vllt. verliert das Fenster durch [c]setIgnoreRepaint(true)[/c] den Focus, was zur Folge hat, dass der KeyListener nicht mehr reagiert.
 

Ark

Top Contributor
Unter Linux: Kann man wenigstens noch mit Strg+Alt+F1 zu tty1 wechseln, um den Prozess abzuknallen? Ein Arbeitsflächenwechsel sollte aber auch noch funktionieren, denke ich. Und wenn sonst alles nichts hilft: Alt+Druck+K muss einfach funktionieren. :D

Ark
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben