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

这本Java书中有错误吗?还是我遗漏了什么?(显示模式),java,swing,fullscreen,Java,Swing,Fullscreen,以下代码的编写方式与我正在阅读的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; publi

以下代码的编写方式与我正在阅读的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);
它工作得很好

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

谢谢

-史蒂夫



DisplayMode与Java“全屏独占模式”功能有关,如下所述:

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

底线是:

1) 并非所有操作系统或显示设备都必须受此API支持


2) 如果设备本身不支持任意显示模式设置,则不一定支持任意显示模式设置的所有组合。

600x800
对于大多数显示适配器来说都是非标准显示大小。但我不明白,为什么600x800是?我当前的显示器分辨率是1920x1080,这不起作用。。。为什么1080x1920会出现?哦,等等,我是说垂直纵横比为600x800。那么为什么600x800工作得非常好呢?
SimpleScreenManager
似乎是一个自定义类。答案可能是那个班级的代码吗?
 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);
}
 }