我们有一个已经存在多年的 Java/Swing 客户端。当我从 XP 移动到 Vista(客户端仅在 Windows 上运行)时,我注意到每当在我的辅助监视器上创建一个新窗口(通常是 JFrame 后代)时,该窗口最初显示为空白,即不显示正常内容 window ,它只是一 block 灰色的实心 block 。如果我随后将该窗口拖到主显示器上,它会在第二个穿过显示器边界时正确绘制自己,然后我可以将它拖回辅助显示器。如果窗口是在主显示器上创建的,它总是完美地存在。我从来没有在 XP 上遇到过这个问题,只在 Vista 上遇到过。我无法在 Windows 7 上轻松测试它,因为缺少双显示器 Windows 7 机器。
有人有任何想法吗?这可能是一个已知的 Java 错误吗?我还在运行最新的 Java 1.6 SDK。
最佳答案
检查视频驱动程序和 JRE 是否是最新的。 (可能有当前的 JDK,但有旧的 JRE。)
Java 会将缓冲委托(delegate)给 DirectDraw 和/或 Direct3D。您可以使用以下 JVM 选项禁用此功能:
-Dsun.java2d.d3d=false
-Dsun.java2d.noddraw=true
还有其他选项详解here .
如果主监视器位于辅助监视器的右侧,则辅助监视器上的屏幕位置将具有负 X 值。 (同样,如果次要位置高于主要位置,则 Y 值将为负值。)可能存在未处理负值的代码。
关于java - 为什么我们的 Java 应用程序不在辅助监视器上显示窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3602590/