这本Java书中有错误吗? 还是我错过了什么? (显示模式)

以下代码的编写方式与我正在阅读的Java书籍完全相同

package main; import java.awt.Color; import java.awt.DisplayMode; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import javax.swing.JFrame; public class FullScreenTest extends JFrame { public static void main(String[] args) { DisplayMode displayMode; if (args.length == 3) { displayMode = new DisplayMode(Integer.parseInt(args[0]), Integer.parseInt(args[1]), Integer.parseInt(args[2]), DisplayMode.REFRESH_RATE_UNKNOWN); } else { displayMode = new DisplayMode(800, 600, 16, DisplayMode.REFRESH_RATE_UNKNOWN); } FullScreenTest test = new FullScreenTest(); test.run(displayMode); } private static final long DEMO_TIME = 1000; public void run(DisplayMode displayMode) { setBackground(Color.blue); setForeground(Color.white); setFont(new Font("Dialog", Font.PLAIN, 24)); SimpleScreenManager screen = new SimpleScreenManager(); try { screen.setFullScreen(displayMode, this); try { Thread.sleep(DEMO_TIME); } catch (Exception e) { } } finally { screen.restoreScreen(); } } public void paint(Graphics g) { g.drawString("Hello World!", 20, 50); } } 

当我运行它时,我得到一个黑屏5秒钟,就是这样。

但是,当我更改以下行时:

 displayMode = new DisplayMode(800, 600, 16, DisplayMode.REFRESH_RATE_UNKNOWN); 

对此:

  displayMode = new DisplayMode(600, 800, 16, DisplayMode.REFRESH_RATE_UNKNOWN); 

它完美地运作。

为什么会这样? 我不太明白。

谢谢,

史蒂夫


  package main; import java.awt.DisplayMode; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Window; import javax.swing.JFrame; public class SimpleScreenManager { private GraphicsDevice device; public SimpleScreenManager() { GraphicsEnvironment environment = GraphicsEnvironment .getLocalGraphicsEnvironment(); device = environment.getDefaultScreenDevice(); } public void setFullScreen(DisplayMode displayMode, JFrame window) { window.setUndecorated(true); window.setResizable(false); device.setFullScreenWindow(window); if (displayMode != null && device.isDisplayChangeSupported()) { try { device.setDisplayMode(displayMode); } catch (Exception e) { } } } public Window getFullScreenWindow() { return device.getFullScreenWindow(); } public void restoreScreen() { Window window = device.getFullScreenWindow(); if (window != null) { window.dispose(); } device.setFullScreenWindow(null); } } 

DisplayMode与Java“全屏独占模式”function有关,这些function在此处记录:

我鼓励你在这里尝试一些示例程序:

底线是:

1)并非所有OS或显示设备都必须受此API支持

2)如果设备本身不支持,则不一定支持任意DisplayMode设置的所有组合