我们在基于swing的应用程序中遇到问题,因为我们已将java版本从6u5升级到6u18(应用程序在WinXP上运行)。
我们的应用程序包含一个驻留在JFrame中的Canvas对象。应用程序在画布上绘制内容。
每次我们在画布上拖动一个轻量级的swing对象(弹出窗口或其他框架)时,都会出现刷新问题。 它眨眼 - 变黑。我们将swing组件从画布上移开并再次单击它后,问题才解决。
我们认为这个问题与画布是重量级对象的事实有关。 我们知道新版本的Java在重量级和轻量级对象混合问题上做了一些更改。
更多细节: 1)我们的问题在java 6u14和6u16中重现。 2)java 6u5中的一切正常。
另一件奇怪的事: 我们有2种类型的站点运行我们的应用程序。 第一种类型有ATI FireGL7100 PCI-E图形卡。第二种类型有Matrox G450 PCI图形卡。 在任何java版本中,问题都不会在基于Matrox的工作站上重现。
还有一件事: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6829858 - 看起来与我们的问题类似。
我们的问题是否熟悉? 你有任何建议(解决方法,想法如何将图形卡的差异与这个问题联系起来)
希望我很清楚, Yoav
答案 0 :(得分:4)
文章Mixing heavy and light components描述了如何在JDK 6更新12中更改对此的支持。两个视频卡可以不同地处理Z顺序。你的代码有可能有一个不再需要的解决方法吗?
答案 1 :(得分:2)
我们遇到了从6u14 +混合HW / LW的问题(破坏一切的修复程序是14)。我们的问题出现在第三部分库(JIDE)中,他们最终解决了问题。
我的建议是尽可能避免硬件。如果做了相关的话,你可以从LW获得非常好的性能。你在画什么需要HW?
答案 2 :(得分:2)
我不知道这是否与其他任何人相关,但我们已找到解决方法/修复我们的问题。
我们将系统属性sun.awt.noerasebackground和sun.java2d.noddraw都设置为true。这消除了我们的问题。
唯一的问题是我不确定设置这些系统属性可能会带来哪些其他问题。