英特尔HD 3700 Linux的Java 8 Swing渲染问题 [英] Java 8 Swing rendering problem with Intel HD 3700 linux

查看:79
本文介绍了英特尔HD 3700 Linux的Java 8 Swing渲染问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Kubuntu 18.04中的Java 8 update 181中开发了一个应用程序.在我的开发PC中,我具有带Intel®HD Graphics 530的Intel i3-6100.所有图形都是使用swing完成的,并且使用此硬件配置,一切都可以正常进行.

I developed an application in java 8 update 181 in Kubuntu 18.04. In my development PC, I have Intel i3-6100 with Intel® HD Graphics 530. All the graphics are done using swing and with this hardware configuration, everything works as it should.

在生产PC上,我具有用于IntelAtom®处理器Z3700系列的带有Intel®HD Graphics的Intel®Celeron®CPU J1900.在相同的OS和Java版本上运行相同的软件,我发现挥杆完成的图形出现了问题.

On the production PC, I have Intel(R) Celeron(R) CPU J1900 with Intel® HD Graphics for Intel Atom® Processor Z3700 Series. Running the same with same OS and java version I noticed problems with my graphics done in swing.

  1. swing组件(如jLabels,jButton等)未更新.例如,框架A具有带有文本"Old text"的标签B,我用文本"New text"更新了标签B上的文本,然后将setVisible(true)调用到框架A,该框架在文本"Old"下变为可见文本".并非每次都发生这种情况,有时会执行更新,有时我没有.除了我在下面提到的解决方案之外,我添加了SwingUtilities时,这种情况仍在发生.
  2. 在我的.gif动画运行不平稳的标签中,或者它们冻结了.
  3. 交换活动帧(将第二帧更改为true,将第一帧更改为false)会有一些延迟.
  4. 一段时间后,GUI应用程序冻结,并在一段时间后(有时在几分钟后,有时在几秒钟后)继续工作.

因此,在许多论坛上进行搜索后,我对应用程序进行了以下更改

So after searching on many forums, I did the following changes on my application

  1. 在所有更新GUI组件的地方都开始使用SwingUtilities.invokeLater()或SwingUtilities.invokeAndWait()(例如,如果某项服务的价格是80.00,然后显示它,则在显示该内容之前先对其进行更改)
  2. 每次更新组件后,我都调用component.revalidate()和component.repaint()或repaint(50).
  3. 每次调用frame.setVisible(status)时,我都会等待windowListener发出的信号,表明该框架已激活,打开,停用或关闭,具体取决于调用状态为true或false的情况.
  4. 在仍然存在挥杆组件无法更新的问题后,我尝试将框架设置为可见,然后更新所有组件.从一开始的一段时间来看,这种方法就可以正常工作,但是一段时间后,我注意到有时组件仍未更新.这是一个丑陋的解决方法,有时可以起作用,因为当框架可见时,您可以看到框架上的内容正在更改.
  5. 我阅读到Intel HD 3000系列上的图形硬件加速存在问题,因此在某些论坛上,我读到我应该使用VM Options -Dsun.java2d.d3d = false和-Dsun.java2d.opengl来调用我的应用程序=是的.这样,图形会更平滑一些,但是经过12到24小时的时间(不是很完美)之后,图形会冻结大约5分钟,而不会进行任何更新.
  6. 在一些论坛上,我看到用户从Java 8降级到Java 7消除了这个问题(这需要修改我的代码和同事的其他代码,我估计至少需要2个月),在一些论坛上,我看到了降级Java 8 Update 25有助于解决此问题.我尝试将其降级到Java 8 update 25,并且图形和动画开始更加流畅,但是又过了一段时间(最后一次24小时),应用程序开始冻结.
  7. 我检查我的操作系统是否具有最新版本的Intel HD图形,并且具有OpenGL版本3.0 Mesa 18.0.5.

此外,我还发现在Minecraft的Intel HD上运行Java 8的游戏存在很多问题.

Also, I saw on a lot of problem with the game Minecraft running with java 8 on Intel HD.

我在Java GUI方面没有太多经验,但是我不了解它如何与一种Intel HD图形优良的软件一起工作,而对于其他图形却没有.一次编写一次可以在任何地方运行的Java概念使我这次失败了.

I don't have much experience with java GUI, but I don't understand how it works with one Intel HD graphic fine, with other doesn't. Write once run anywhere concept of java failed me this time.

//编辑2018-11-02 最终,我在速卖通订购的微型pci-e至pci-e卡到达了,但是图形仍然出现故障.不知道下一步该怎么做.我猜所有的图形渲染都是由处理器完成的,而不是我的nvidia卡或Intel HD图形.

//EDIT 2018-11-02 Finally my mini pci-e to pci-e card arrived that i ordered on aliexpress, but the graphics still glitches. No idea what to try next. I guess that all the graphics rendering are done by the processor, not my nvidia card or the intel hd graphics.

推荐答案

存在一个已知的错误:

There is a known bug: https://bugs.openjdk.java.net/browse/JDK-8067328. Oracle recommends to disable D3D (they have disabled it by default in 8_40).

本文介绍了相同的问题以及解决该问题的方法: https://yakovfain.com/2014/06/27/swing-rendering-seems-to-be-broken-in-java-8/

This article describes the same problem and way to fix it at the end: https://yakovfain.com/2014/06/27/swing-rendering-seems-to-be-broken-in-java-8/

这篇关于英特尔HD 3700 Linux的Java 8 Swing渲染问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆