gpt4 book ai didi

Java Swing 屏幕 Artifact

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:27:03 25 4
gpt4 key购买 nike

我的 Swing 应用程序存在某种重绘问题。当屏幕 (JFrame) 关闭时,来自该屏幕的 Artifact 有时会绘制在其他屏幕上。在我们办公室的 100 多台开发人员机器和使用该软件的数千名用户中的大多数人身上,它是完全不可重现的。在过去的几年里,关于这个问题的报道零星出现,但我们总是把责任归咎于显卡或驱动程序。不过,在过去几个月中,有关该问题的报告数量急剧上升,因此我们需要找出真正的原因。

几乎我们所有的客户端都在 Windows 上运行,它会影响 Windows 7 和 8 机器。我们通常在 JRE 1.6.0_29 上运行,但在 1.6.0_45 和 1.7.0_51 上也会出现此问题。

下图说明了这个问题。我用红色勾勒出 Artifact 的轮廓 - 这是另一个已关闭的 JFrame 的一部分。当 JFrame 可见时,它不在屏幕上的那个位置。另请注意, Artifact 上方的 JTable 列超出了行。最后,请注意 Artifact 并没有在 JTable 上绘制,而是在其父 JScrollPane 和屏幕最底部的单独 JPanel 上绘制。

有人知道是什么原因造成的吗?

enter image description here

最佳答案

为了在这里“关闭”(即回答)这个问题,评论的结果:

Marco13 : Although I have never encountered such an error, it might be worth trying -Dsun.java2d.opengl=true or -Dsun.java2d.d3d=false

(指在 http://docs.oracle.com/javase/7/docs/technotes/guides/2d/flags.html#d3d 中列出的 VM 标志)

Jason : Adding -Dsun.java2s.d3d corrected the issue.

(我假设这是指设置 -Dsun.java2s.d3d=false,因为它默认启用)


关于上一条评论的问题:

您认为启用 Direct3D 支持(对于数据输入应用程序)有某种性能优势吗?

我还没有使用 d3d 标志,只使用了 opengl 标志,用于一些实验,而不是用于性能测试。所以我不知道这个标志对性能有多大影响。同样,我的直觉是,对于简单的应用程序,这应该不会产生明显的影响。对于“简单”,我指的是仅使用标准 GUI 组件且不通过重写的 paintComponent 方法中的 Graphics2D 执行复杂的自定义呈现操作的应用程序。但根据屏幕截图,此应用程序可能至少涉及 Swing 中存在的最复杂的“标准 GUI 组件”——即 JTable。因此,例如,如果您在 ScrollPane 中有一个大型 JTable,可能带有复杂的自定义 CellRenderer,您应该考虑对某些(最好是最慢的)目标机器的性能影响进行专门测试,如果可能的话。

关于Java Swing 屏幕 Artifact ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21681071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com