2010-08-30 71 views
9

我们有一个Java/Swing客户端已经存在了好几年了。当我从XP移到Vista时(客户端只能在Windows上运行),我注意到无论何时在辅助监视器上创建一个新窗口(通常是JFrame后代),该窗口最初都显示为空白,即不显示正常内容窗户,它只是一个坚实的灰色块。如果我然后将该窗口拖到主显示器上,第二个显示器穿过显示器边界,它将自行吸合,然后将其拖回次显示器。如果窗口是在主监视器上创建的,它总是完美地存在。我从来没有在XP上的这个问题,只有在Vista上。我无法在Windows 7上轻松测试它,因为它缺少双显示器Windows 7机器。为什么我们的Java应用程序不能在辅助监视器上显示窗口?

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

+0

检查Java客户端是否被告知重新绘制。 – 2010-08-30 17:50:37

+0

你可以尝试使用GraphicsEnvironment类。这使您可以获得连接到计算机的所有显示器的列表。 – Michael 2010-08-30 19:36:58

+0

我在我的游戏中遇到了类似的问题,如果我将窗口拖到辅助显示器上,它会变白,直到我将其拖回。将它拖回来后,屏幕不再更新。 – 8bitslime 2015-03-11 06:34:08

回答

12

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

Java会将缓冲委托给DirectDraw和/或Direct3D。你可以用下面的JVM选项禁用此:

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

还有其他选项的详细here

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

+0

我更新了视频驱动程序并检查了JRE。不用找了。我添加了两个提到的JVM选项,问题就消失了。谢谢你的提示! – Morinar 2010-08-31 15:08:07

相关问题