【问题标题】:Why isn't Java Fullscreen Exclusive Mode running my max screen resolution?为什么 Java 全屏独占模式没有运行我的最大屏幕分辨率?
【发布时间】:2020-02-15 07:24:44
【问题描述】:

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

GraphicsDevice device = GraphicsEnvironment
         .getLocalGraphicsEnvironment().getDefaultScreenDevice();
// device.getDisplayMode() returns 1920 x 1080 and some other stats
// device.getDefaultConfiguration().getBounds() returns 1536 x 864

我希望尝试将屏幕设置为 1920 x 1080 而不是 1536 x 864。是否有实际的方法可以做到这一点或者这是否正常?

提前致谢!

编辑:现在,我让它在 Windows 上工作

【问题讨论】:

  • 别忘了,在 MacOS 上,“全屏模式”与在不同操作系统上的用户期望不同,for example
  • @MadProgrammer 谢谢,我会记住的。
  • 好吧,似乎 eawt 包不再可用,并且基本 API 中的全屏支持没有任何替代品,这意味着您必须使用 JNI/JNA 方法来实现它,这是一种耻辱,因为它工作得非常好:(
  • 嗯,如果我错了,请纠正我,但你是说原生全屏支持不再可以实现这一点,我必须使用那些库来实现这一点?
  • 没错。 Apple 不再提供 eawt 包或库,虽然其中一些功能已经转移到 Desktop API,但原生全屏支持(就像你按下窗口上的绿色展开按钮一样)不是从代码的角度支持。

标签: java 2d fullscreen


【解决方案1】:

“为什么”选择了那个模式,我不能说,但你要做的第一件事就是检查可用的模式......

DisplayMode modes[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDisplayModes();
for (DisplayMode mode : modes) {
    System.out.println(mode);
}

所以,在我的 2017 MacBook Pro 上,运行 macOS Maujave (10.14) 我得到...

2880x1800x32bpp@[Unknown refresh rate]
1440x900x32bpp@[Unknown refresh rate]
3360x2100x32bpp@[Unknown refresh rate]
2560x1600x32bpp@[Unknown refresh rate]
2048x1280x32bpp@[Unknown refresh rate]
1650x1050x32bpp@[Unknown refresh rate]
1280x800x32bpp@[Unknown refresh rate]
1152x720x32bpp@[Unknown refresh rate]
1024x768x32bpp@[Unknown refresh rate]
840x524x32bpp@[Unknown refresh rate]
800x600x32bpp@[Unknown refresh rate]
640x480x32bpp@[Unknown refresh rate]
1680x1050x32bpp@[Unknown refresh rate]

但是,如您所见,这里不支持 1080p :(,所以如果我站在您的立场上,我需要找到接近的东西。也许,1650x10502048x1280

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

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

【讨论】:

  • 非常感谢您的回复!我还是不知道怎么回事。我正在使用具有 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,但您有一些限制您正在使用的输出区域的大小跨度>
【解决方案2】:

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

【讨论】:

  • 我刚刚意识到我在以下答案的评论中回答了它。有关详细信息,请参阅下面的 cmets。
猜你喜欢
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
相关资源
最近更新 更多