我有一个带有某种重绘问题的 Swing 应用程序。当一个屏幕 (JFrame) 关闭时,来自该屏幕的工件有时会被绘制在其他屏幕上。它在我们办公室的 100 多台开发人员机器和使用该软件的数千名用户中的大多数上是完全无法重现的。在过去的几年里,关于这个问题的报道很分散,但我们总是把责任归咎于显卡或驱动程序。然而,在过去的几个月里,关于这个问题的报告数量急剧增加,所以我们需要找出真正的原因。
我们几乎所有的客户端都在 Windows 上运行,它影响 Windows 7 和 8 机器。我们通常在 JRE 1.6.0_29 上运行,但问题也发生在 1.6.0_45 和 1.7.0_51 上。
下图说明了这个问题。我用红色勾勒了工件 - 这是另一个已关闭的 JFrame 的一部分。当 JFrame 可见时,它不在屏幕上的那个位置。另请注意,工件上方的 JTable 列不符合要求。最后,请注意,工件不只是在 JTable 上绘制,而是在其父 JScrollPane 和屏幕最底部的单独 JPanel 上绘制。
任何人有任何想法可能导致这种情况?