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

标签 java swing windows-vista

我们有一个已经存在多年的 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/

相关文章:

windows-vista - vbscript检测UAC是否提升

.net - Vista上是否默认安装了.NET Framework?

windows - 用于创建备份并使用时间戳重命名的批处理文件

java - 从本地mac电脑部署一个java web项目到linux服务器

java - neo4j 与 Java 的连接错误

java - 运行一个类,然后运行另一个类

java - javax.swing 是否可以在一帧中使用两个画家?

java - 套接字客户端卡在 'waiting for message from server.'

java - 查找实数数组每个元素频率的最快算法?

java - 自定义绘画和 Z 顺序 : query re painting order