Java Swing屏幕工件
我有一个带有某种重绘问题的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上. 有人有什么想法会导致这种情况吗? 解决方法
为了让这个问题在这里“关闭”(即回答),评论的结果如下:
(参考http://docs.oracle.com/javase/7/docs/technotes/guides/2d/flags.html#d3d中列出的VM标志)
(我假设这指的是设置-Dsun.java2s.d3d = false,因为它默认启用) 关于上次评论的问题: “你认为启用Direct3D支持(数据输入应用程序)有哪些性能优势?” 我还没有使用d3d标志,但只有opengl标志用于某些实验,而不是性能测试.所以我不知道这面旗帜在多大程度上会对性能产生显着影响.同样,我的直觉是,对于简单的应用程序,这应该不会产生明显的影响. “简单”是指仅使用标准GUI组件的应用程序,并且不会在重写的paintComponent方法中通过Graphics2D执行复杂的自定义渲染操作.但是根据屏幕截图,这个应用程序可能至少涉及Swing中存在的最复杂的“标准GUI组件” – 即JTable.因此,如果你有一个ScrollPane中的大型JTable,可能还有复杂的自定义CellRenderers,你应该考虑对目标机器的某些(最好是最慢的)性能影响的专用测试,如果可能的话. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |