为什么您的Java应用程序不会在辅助监视器上显示窗口?

时间:2010-08-30 17:08:28

标签: java swing windows-vista

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

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

1 个答案:

答案 0 :(得分:15)

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

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

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

还有其他选项详细here

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