当前位置: 首页 > 知识库问答 >
问题:

Intel HD 3700 linux下的Java 8 Swing渲染问题

程树
2023-03-14

我在Kubuntu18.04中用Java8 Update181开发了一个应用程序。在我的开发PC中,我有英特尔i3-6100和英特尔®高清图形530。所有的图形都是使用swing完成的,有了这个硬件配置,一切都按它应该的方式工作。

在生产PC上,我有英特尔(R)赛扬(R)CPU J1900与英特尔®高清图形英特尔原子®处理器Z3700系列。使用相同的OS和java版本运行相同的代码,我注意到在Swing中完成的图形有问题。

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

所以在许多论坛上搜索之后,我对我的应用程序做了以下修改

  1. 开始使用SwingUtilities.invokelater()或SwingUtilities.invokeandWait()(在这里,我希望在显示之前更改一些内容,例如,如果一个服务的价格是80.00update然后显示它)。
  2. 每次更新组件后,我调用component.revalidate()和component.repaint()或repaint(50).
  3. 每次调用frame.setvisible(status)时,我都会等待来自windowListener的信号,即框架被激活并打开,或者停用并关闭,这取决于以true或false作为状态的调用。
  4. 在swing组件没有更新的问题仍然存在之后,我尝试将框架设置为可见,并更新它的所有组件。这在开始的时候工作了一段时间,但过了一段时间后,我注意到有时组件又没有更新。这是一个难看的变通方法,有时会起作用,因为当框架可见时,您可以看到框架上的内容正在更改。
  5. 我读到Intel HD 3000系列的图形硬件加速有问题,所以在一些论坛上,我读到我应该用VM选项-dsun.java2d.d3d=false和-dsun.java2d.opengl=true调用我的应用程序。这样图形会更平滑一些,但是在12到24小时之间的一段时间之后(不是完美的),图形会冻结大约5分钟,不会更新任何内容。
  6. 在一些论坛上,我看到用户通过从Java8降级到Java7来消除这个问题(这需要修改我的代码和同事的其他代码,我估计至少需要2个月),在一些论坛上,我看到降级到Java8更新25有助于解决这个问题。我尝试降级到Java8 Update25,图形和动画开始变得更流畅,但一段时间后(上次是24小时),应用程序开始冻结。
  7. 我检查了我的操作系统是否有最新版本的Intel HD graphics和OpenGL版本3.0Mesa 18.0.5。

另外,我在Intel HD上看到了很多与Java8运行的游戏Minecraft的问题。

共有1个答案

逑禄
2023-03-14

有一个已知的bug:https://bugs.openjdk.java.net/browse/jdk-8067328。Oracle建议禁用D3D(8_40)。

本文最后描述了相同的问题和解决方法:https://yakovfain.com/2014/06/27/swing-rendering-seems-to-be-broken-in-java-8/

 类似资料:
  • 问题内容: 在过去的六个月中,我一直在与Backbone合作。前两个月很混乱,学习并弄清楚我要如何围绕它构建代码。接下来的4个月,该公司推出了适合生产的应用程序。不要误会我的意思,Backbone使我摆脱了以前标准的成千上万行客户端代码的混乱,但是它使我能够在更短的时间内完成更多宏伟的事情,从而带来了一系列全新的问题。对于我在这里提出的所有问题,有一些简单的解决方案,感觉像是骇客或只是 错误 。我

  • 从昨天开始,我已经开始与Android Studio的工作。我的问题是当我做我的布局。我有下一个错误(观看屏幕截图了解更多信息): 渲染问题:此版本的渲染库比您的Android Studio版本更新。请更新Android Studio 如果我检查更新,他会说我已经有了最新版本的Android studio,所以我无法更新。 我也在SDK管理器中安装了一些东西,请看下面的截图。 有人能帮我解决这个问

  • 我是android studio的新手,安装了一个新版本(1.5.1版)。出于某种原因,我一直收到一条错误消息(每次我使用应用程序主题时),说有渲染问题:缺少样式。我在网上寻找解决方案,但大多数都过时了,或者根本不起作用。 谢谢你的帮助。 清单文件: 构建渐变:

  • 因此,在去年与react合作之后,我设法理解了它的功能和注意事项,以及如何避免不必要的渲染。 昨天我在玩一些代码,遇到了一个以前没有看到的问题,有点困惑。 在上面的代码中,我添加了一个简单的计数器,每次单击都会设置一个新的状态,这会导致重新渲染,在屏幕上显示“Count:1”,并在dev工具中显示一个“counter render”日志,就像我预期的那样。 奇怪的部分来自渲染变量,我用数字0启动(

  • 我们刚刚将本地Android SDK更新到了新的22版,我们也在尝试更新我们的应用程序,但在Android Studio的布局设计视图中SearchView呈现似乎有一个问题:每当设计师试图呈现SearchView元素时,它都会抛出一个异常: java.lang.nullPointerException · 在Android.content.res.typedarray.hasValueOremp

  • 我有这个xml文件。如果我编译,它可以正常工作,但如果我去看预览,它会显示出这个错误: 我试着找这个身份证,但到处都找不到。这个@id/visible是什么?我怎么才能修好?谢谢