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

Mor*_*nar 11 java swing windows-vista

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

有人有什么想法吗?这可能是一个已知的Java bug吗?我也在运行最新的Java 1.6 SDK.

Dev*_*ler 15

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

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

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

里面有详细的其他选择这里.

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