为什么不是';运行我的最大屏幕分辨率的Java全屏独占模式?

为什么不是';运行我的最大屏幕分辨率的Java全屏独占模式?,java,2d,fullscreen,Java,2d,Fullscreen,我试图让Java全屏独占模式在我的计算机上以1080p运行,但它的大小只有1536x864。显示模式也设置为1920 x 1080 GraphicsDevice设备=GraphicsEnvironment .getLocalGraphicsEnvironment().getDefaultScreenDevice(); //getDisplayMode()返回1920 x 1080和一些其他统计数据 //device.getDefaultConfiguration().getBounds()返回1

我试图让Java全屏独占模式在我的计算机上以1080p运行,但它的大小只有1536x864。显示模式也设置为1920 x 1080

GraphicsDevice设备=GraphicsEnvironment
.getLocalGraphicsEnvironment().getDefaultScreenDevice();
//getDisplayMode()返回1920 x 1080和一些其他统计数据
//device.getDefaultConfiguration().getBounds()返回1536 x 864
我希望尽量让屏幕显示在1920 x 1080,而不是1536 x 864。有没有一个实际的方法来做到这一点或这是正常的

提前谢谢

编辑:现在,我要让它在Windows上运行。选择该模式的原因,我不能说,但您要做的第一件事是检查可用的模式

DisplayMode modes[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDisplayModes();
for (DisplayMode mode : modes) {
    System.out.println(mode);
}
因此,在我2017年的MacBook Pro上,运行macOS Maojave(10.14),我得到

但是,正如您所看到的,这里不支持1080p:(,因此,如果我处在您的位置,我需要找到接近的东西。可能,
1650x1050
2048x1280

这对你有什么帮助?好吧,一旦你确定了适合你需要的最佳模式,并且根据,你可以简单地做

GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
device.setFullScreenWindow(frame);
device.setDisplayMode(mode);

过了一段时间,我意识到我没有回答这个问题。我最终找到了答案,这个问题很可能是Java 11中的一个bug。当我回到Java 8开发环境(v221?)时,像素又回到了1920 x 1080。

不要忘了在MacOS上,“全屏模式”在不同的操作系统上有不同的用户期望,@MadProgrammer谢谢,我会记住这一点。好吧,eawt包似乎不再可用,并且在基本API中没有任何全屏支持的替代品,这意味着您必须使用JNI/JNA方法来实现它,这是一个遗憾,因为它确实有效陆上通信线:(嗯,如果我错了,请纠正我,但你是说本机全屏支持不再能够实现这一点,我将不得不使用这些库来实现这一点吗?没错。苹果不再提供
eawt
包或库,尽管一些功能已经转移到
桌面
API,n全屏幕支持(就像您通过按下窗口上的绿色展开按钮获得的支持)从代码角度来看是不支持的。非常感谢您的回复!我仍然不知道发生了什么事。我使用的是一台具有128种显示模式的计算机,其中包括1080p,并且当前显示模式设置为1080p(如下图所示)“//device.getDisplayMode()返回1920 x 1080和其他一些统计数据。”但是,当我实际检查全屏尺寸时,结果是1536 x 864(实际上这不是一种可用的显示模式)。此外,为了再次检查,当我绘制到屏幕时,我只能看到1536 x 864范围内的对象。(1536正好是1920的80%。)希望我澄清一点。在大多数情况下,Java或MacOS都会根据一系列内部决策来决定使用哪种最佳模式,我不知道。最好的选择是简单地找到您想要的模式并直接设置。它“可以”"这是一个驱动程序问题,但如果没有一个可运行的示例来复制这个问题,我不能肯定我还想指出,即使在窗口模式下,屏幕似乎也被限制在1536 x 864。这可能只是一个与显示模式无关的完全不同的问题。这只是一个想法。我的计算机当前的分辨率是1920 x 1080,所以我真的不知道发生了什么事。非常感谢你的帮助!好吧,根据你告诉我们的,看起来屏幕实际上使用的是1920x1080,但是你有一些限制你正在使用的输出区域的大小的东西。我刚刚意识到我在下面的回答中的一条评论中回答了这个问题。有关详细信息,请参阅下面的评论。
GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
device.setFullScreenWindow(frame);
device.setDisplayMode(mode);