【问题标题】:Why would our Java app not display windows on secondary monitor?为什么我们的 Java 应用程序不会在辅助监视器上显示窗口?
【发布时间】:2010-08-31 05:01:34
【问题描述】:

我们有一个 Java/Swing 客户端已经存在了好几年。当我从 XP 迁移到 Vista(客户端仅在 Windows 上运行)时,我注意到每当在我的辅助监视器上创建一个新窗口(通常是 JFrame 后代)时,该窗口最初显示为空白,即,而不是显示正常内容窗户,它只是一块坚固的灰色块。如果我然后将该窗口拖到主监视器上,第二个它越过监视器边界,它会正确绘制自己,我可以将它拖回辅助监视器。如果窗口是在主监视器上创建的,它总是完美地存在。我从来没有在 XP 上遇到过这个问题,只有在 Vista 上。我无法在 Windows 7 上轻松测试它,因为缺少双显示器 Windows 7 机器。

有人有任何个想法吗?这可能是一个已知的 Java 错误吗?我也在运行最新的 Java 1.6 SDK。

【问题讨论】:

  • 检查 Java 客户端是否真的被告知要重新绘制。
  • 您可以尝试使用 GraphicsEnvironment 类。这使您可以获取连接到计算机的所有显示器的列表。
  • 我在我的游戏中遇到了类似的问题,如果我将窗口拖到我的辅助监视器上,它会变白,直到我将它拖回来。拖回来后屏幕不再更新。

标签: java swing windows-vista


【解决方案1】:

检查视频驱动程序和 JRE 是否是最新的。 (可能有当前的 JDK,但有旧的 JRE。)

Java 会将缓冲委托给 DirectDraw 和/或 Direct3D。您可以使用以下 JVM 选项禁用此功能:

  • -Dsun.java2d.d3d=false
  • -Dsun.java2d.noddraw=true

还有其他选项详解here

如果主监视器位于辅助监视器的右侧,则辅助监视器上的屏幕位置将具有负 X 值。 (同样,如果次要位置高于主要位置,则 Y 值为负。)可能存在未处理负值的代码。

【讨论】:

  • 我更新了视频驱动程序并检查了 JRE。没变。我添加了提到的两个 JVM 选项,问题就消失了。感谢您的提示!
  • 太棒了。这也适用于 Win10 上的第三方 Java 客户端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 2020-06-06
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多