11

当我在我的计算机上运行 Java 程序(如 DbVisualizer 和 OpenProj)时,一些 UI 组件(如按钮、图像、复选框、滚动条等)显示为空白框。当您打开程序时,这些组件中的一些通常会首先正常显示,然后当您将鼠标悬停在它们上方时会变为空白。

我已经更新了 JRE 和视频驱动程序,并-Dsun.java2d.noddraw=true;-Dsun.java2d.d3d=false;按照 Java 论坛中的建议使用 调整了 JAVA_OPTS,但到目前为止,这些提议的解决方案都没有奏效。

我不认为这是特定于操作系统的问题,因为我检查了其他一些具有完全相同配置的操作系统(Windows Vista)和硬件的 PC,其中许多都没有出现这个问题。

可以在这里看到这种情况的屏幕截图:

GUI 空白框

有任何想法吗?

4

4 回答 4

5

那些 JAVA_OPTS 必须用空格而不是分号分隔!

使用 jVisualVM 连接到应用程序并验证“JVM Arguments”部分是否包含您所需的所有选项。

于 2013-09-06T19:14:27.477 回答
4

在使用 windows 基本主题时,我经常会发现许多图形故障。移动窗口会在其自身后面创建一个在背景窗口上方的轨迹,并且 UI 控件有时在鼠标悬停之前不会出现。

如前所述,尝试使用 Windows 航空主题,如果您不喜欢航空外观,只需关闭透明度。

于 2013-09-05T12:14:05.087 回答
0

我怀疑禁用 DirectDraw 将解决此问题,并且您尝试禁用它是不成功的。

正如 Ryan 所指出的,这些选项的格式似乎不正确。删除分号并在它们之间放置一个空格,或者更好的是,只使用sun.java2d.d3d=false. 该sun.java2d.noddraw标志已被Java SE6u10废弃,现在设置为 true 与设置的效果相同sun.java2d.d3d=false。无需同时设置。

格式不正确的影响可以看下面的代码:

public class WrongArgs {
    public static void main(String[] args) {
        System.out.println("sun.java2d.noddraw: " + System.getProperty("sun.java2d.noddraw"));
        System.out.println("sun.java2d.d3d: " + System.getProperty("sun.java2d.d3d"));
    }
}

使用 args 运行此代码:“-Dsun.java2d.noddraw=true;-Dsun.java2d.d3d=false;” 产生:

sun.java2d.noddraw:真;-Dsun.java2d.d3d=假;

sun.java2d.d3d:空

使用参数“-Dsun.java2d.noddraw=true -Dsun.java2d.d3d=false”运行

sun.java2d.noddraw:真

sun.java2d.d3d:假

于 2013-09-10T09:08:56.037 回答
0

这看起来更像是图形驱动程序问题。注意缺少的东西是如何通过将位图数据直接传输到图形卡来绘制的图像(图标、复选框)。在这种情况下, sun.java2d.noddraw=falseandsun.java2d.d3d=false更像是一种黑客攻击,真的。

我会做的是:

  • 检查我是否使用最新版本的 Java(如果您使用的是 64 位系统,切换到 64 位 Java 不会有什么坏处)
  • 检查您的图形驱动程序,确保它们是最新版本
  • 检查 Windows 服务包

也尝试使用改变外观;也许这会有所帮助。

于 2013-09-10T08:18:11.663 回答