【问题标题】:Corrupted Java Swing Window损坏的 Java Swing 窗口
【发布时间】:2009-05-15 19:42:05
【问题描述】:

我编写的 Java swing GUI 程序的一个用户遇到了一个问题,即主 swing 窗口无法正确呈现到屏幕上并且 GUI 冻结。这是他屏幕上的屏幕截图(顶部)和应该显示的内容(底部)的比较:

alt text http://www.shapecollage.com/temp/SwingCorruption.jpg

他运行的是带有 Java 1.6.0_13 的 Windows XP SP3,他的显卡是带有双显示器设置的 ATI X1600。

该程序(如果您想自己测试)位于:
www.shapecollage.com/download.html

我有几千个用户,没有其他人报告过这个错误,我已经在 Windows XP 上对其进行了彻底的测试。任何计算都是在与常规 GUI 线程不同的线程中完成的,并且该程序可以在许多其他计算机上运行,​​所以我认为这不是程序本身的问题,而是他的特定设置有问题。

之前有没有人在系统上看到过这种类型的错误,或者对这个用户的系统上可能会导致这种问题的问题有什么建议?

谢谢,
文森特

【问题讨论】:

  • 有趣。一两年前向我报告了这样的问题;我永远无法重现它,所以我可能将其关闭为驱动程序错误。我很想看看这里是否有任何好的答案。
  • 哎呀!要让它变得那么糟糕,它必须是 jvm 与图形驱动程序的事情 - 我怀疑你可以做很多事情。
  • 程序加载后,渲染中会出现一些轻微但明显的伪影,然后当尝试实际使用界面时,它显然会变得疯狂并冻结。我无法在我的台式机或其他几台计算机上复制它。
  • 应该是驱动问题。

标签: java windows swing


【解决方案1】:

Java 与图形驱动程序和/或图形硬件之间的交互可能存在问题。

several flags that can influence how Java draws to the screen

您可能想尝试使用这些标志中的任何一个来启动应用程序:

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

这些标志分别切换 OpenGL 管道、使用 Direct3D 和禁用 DirectDraw。

如果其中任何一个解决了您的问题,那么您可能会考虑向 sun 提交错误,因为这可能不是应用程序的问题。

【讨论】:

  • 我遇到了一个相关问题,其中 -Dsun.java2d.d3d=false 解决了这个问题。见stackoverflow.com/questions/848481/…
  • 2015 年:在 Ubuntu 14.04 中,所有 gui 控件、我自己的应用程序和我使用的第三方应用程序中的图形损坏。使用 -Dsun.java2d.opengl=true 启动任何一个都可以解决问题。 NVidia 卡会发生这种情况,我认为 Intel 还可以。
【解决方案2】:

我们有一个非常相似的问题,通过更新图形驱动程序已解决。问题可能来自导致 VRAM 损坏的双显示器设置,因此您的客户可能会尝试仅使用单个显示器是否能更好地工作。虽然您可能期望 Java 不会非常依赖硬件,但我们的图形密集型应用程序在通过特定类型的投影仪运行时总是会出现 BSOD...

【讨论】:

  • 用户更新了他的显卡驱动并解决了问题。
【解决方案3】:

我还没有看到这种特定类型的损坏图形,但我看到 Windows 上的 Java 图形问题在扩展显示控制面板中的硬件加速降低时消失了。

【讨论】:

    【解决方案4】:

    Swing 不是线程安全的,因此如果您在 GUI 线程以外的任何地方进行渲染,您可能会遇到这种情况。

    【讨论】:

    • 渲染只在 GUI 线程中完成。该程序在数千台其他计算机上运行良好。
    【解决方案5】:

    我见过这样损坏的图形,但在 java 中从未见过。我看到的地方是在 windows draw/etc 代码中,平铺和雪花的外观通常表明像告诉图像绘制代码你要绘制一个特定大小和位深度的图像,然后填充具有不同位深度的图像缓冲区。就像用来自整数 RGBA 源的数据填充字节数组并将其放入整数 RGB 目标?

    但从屏幕截图来看,用户似乎也在运行其他类型的应用程序,因为最小化/最大化/关闭按钮旁边有一个额外的按钮,因此其他一些第三方应用程序正在修改窗口。可能是这样吧?

    否则我会说驱动程序问题。总有一些解决方案,例如禁用 d3d 绘图或 VM 现在自动执行的其他绘图优化,也许可以解决它?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-06
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 2013-10-16
      • 2010-10-11
      • 1970-01-01
      相关资源
      最近更新 更多