损坏的Java Swing窗口

时间:2009-05-15 19:42:05

标签: java windows swing

我编写的Java swing GUI程序的一个用户遇到的问题是主旋转窗口无法正确呈现到屏幕并且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线程不同的线程中完成的,并且该程序可以在许多其他计算机上运行,​​所以我认为这不是程序本身的问题,而是他的特定设置有问题。

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

谢谢,
文森特

5 个答案:

答案 0 :(得分:6)

可能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提交Bug,因为这可能不是那里的应用程序。

答案 1 :(得分:2)

我们遇到了一个非常类似的问题,通过更新图形驱动程序解决了这个问题。问题可能来自导致VRAM损坏的双显示器设置,因此您的客户可能会尝试只使用一台显示器才能更好地工作。虽然您可能期望Java不会非常依赖硬件,但我们的图形密集型应用程序在通过特定投影仪类型运行时始终可以设置为BSOD ...

答案 2 :(得分:1)

我还没有看到特定类型的损坏图形,但我看到,当扩展显示控制面板中的硬件加速减少时,Windows上的Java图形问题就会消失。

答案 3 :(得分:0)

Swing不是线程安全的,所以如果你在GUI线程之外的任何地方进行渲染,你可以期待这种事情。

答案 4 :(得分:0)

我已经看过像这样的损坏的图形,但从未在java中看到过。我看到它的地方是在windows draw / etc代码中,而平铺和雪景通常表示像告诉图像绘制代码,你将要绘制一个具有一定大小和位深度的图像,但随后填写具有不同位深度的图像缓冲区。比如用整数RGBA源的数据填充字节数组并将其放入整数RGB目的地?

但是从屏幕截图来看,用户看起来也在运行其他类型的应用程序,因为最小化/最大化/关闭按钮有一个额外的按钮,所以其他一些第三方应用程序正在修改窗口。也许这搞乱了?

否则我会说司机问题。总有一些解决方案,比如禁用d3d绘图或VM现在自动执行的其他一些绘制优化,可能会解决它?