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

2024-02-17

我在 Kubuntu 18.04 中用 java 8 update 181 开发了一个应用程序。在我的开发 PC 中,我拥有配备英特尔® HD Graphics 530 的英特尔 i3-6100。所有图形均使用 swing 完成,并且通过此硬件配置,一切都按预期运行。

在生产 PC 上,我拥有 Intel(R) Celeron(R) CPU J1900,带有适用于 Intel Atom® 处理器 Z3700 系列的 Intel® HD 显卡。使用相同的操作系统和 java 版本运行相同的程序,我注意到我在 swing 中完成的图形存在问题。

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

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

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

另外,我在 Intel HD 上使用 Java 8 运行《我的世界》游戏时发现了很多问题。

我对 java GUI 没有太多经验,但我不明白它如何与一个英特尔高清显卡配合使用,而与其他显卡配合使用则不行。这次写一次就可以在任何地方运行java的概念让我失败了。

//编辑2018-11-02 最后,我在速卖通上订购的迷你 PCI-E 转 PCI-E 卡到货了,但图形仍然出现故障。不知道接下来要尝试什么。我猜想所有的图形渲染都是由处理器完成的,而不是我的 nvidia 卡或 intel 高清显卡。


有一个已知的错误:https://bugs.openjdk.java.net/browse/JDK-8067328 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/ https://yakovfain.com/2014/06/27/swing-rendering-seems-to-be-broken-in-java-8/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Intel HD 3700 linux 的 Java 8 Swing 渲染问题 的相关文章

随机推荐

  • 我可以让节点在数字字符串中输出逗号而不引入 i18n 吗?

    并不是说添加一个需求有什么大不了的 而是节点文档建议您不需要它 http nodemanual org latest js doc Number html Number toLocaleString from the docs var nu
  • Docker 在 Windows 上添加网络驱动器作为卷

    我正在尝试将网络驱动器安装为卷 这是我正在尝试的命令 docker run v NetworkDirectory Folder data alpine ls data 我在 Windows 上运行此命令 数据目录为空 如何将此网络目录作为卷
  • 关于 MVVM 模式和 GUI 中 XAML 动态加载的混淆

    嗯 这个问题与 MVVM 模式相关 我可以在这个论坛上快速得到答案 所以我想询问并消除我对该模式的困惑 我对 MVVM 方法还很陌生 我欣赏这种模式并了解其背后的原理 也许我没有对这个模式进行太多的研究 这就是为什么会有一些困惑 如果有一种
  • 检测java中的回车键

    我尝试使用扫描仪获取用户输入 如果用户按 Enter 键 则继续执行下一个输入语句 但它一次打印全部 public class MainRDS public static void main String args Scanner in n
  • Spring Boot oauth2:如何设置授权请求中的资源参数以使adfs满意?

    我正在尝试设置一个 Spring Boot 应用程序 该应用程序使用 oauth2 和 Active Directory 联合身份验证服务作为身份验证提供程序 我从这里的教程开始 https spring io guides tutoria
  • 以强类型方式获取属性的 [DisplayName] 属性

    再会 我有这样的方法来获得 DisplayName 属性的属性值 直接附加或使用 MetadataType 属性 我在极少数情况下需要使用它 DisplayName 在控制器代码中 public static class MetaDataH
  • 在 DirectPipelineRunner 上使用自定义 DataFlow 无界源

    我正在编写一个从 Kafka 0 8 读取的自定义 DataFlow 无界数据源 我想使用 DirectPipelineRunner 在本地运行它 但是 我得到以下堆栈跟踪 Exception in thread main java lan
  • htmlunit 在运行项目后总是给出多个 javascript 异常

    我正在开发一个项目 该项目检查导入的电子邮件列表 以查看用户是否在雅虎上注册 当我单击 开始 按钮时 它应该转到 yahoo 邮件注册页面并检查此导入的 txt 文件中的每封电子邮件 我依赖 htmlunit 库 但它总是给出异常 尽管禁用
  • GORM 中的多个一对多关系

    我有一个struct定义在GO像这样 package models StoryStatus indicates the current state of the story type StoryStatus string const Pro
  • Ioc/DI - 为什么我必须引用应用程序入口点中的所有层/组件?

    与这个问题相关 EF4 为什么启用延迟加载时必须启用代理创建 https stackoverflow com questions 9500642 ef4 mvc3 with windsor castle ioc di navigation
  • 在React中使用父组件中的按钮提交表单

    所以我必须在模态中实现一个表单 正如你所看到的 模态中的按钮不是表单中的按钮 我将表单创建为模式的子组件 如何使用父组件中的按钮提交表单 我在用React 语义 UI https react semantic ui com collecti
  • HKDF 是在 Java 密码体系结构中实现的吗?

    在我正在写的应用程序中我需要做HKDF https en m wikipedia org wiki HKDF从一个密码派生出两个不同的密钥 在搜索有关如何使用 Java 的示例时 我发现了以下两个 https github com Whis
  • Java:notify() 与 notifyAll() 重头再来

    如果一副护目镜 之间的差异notify and notifyAll 然后会弹出很多解释 抛开javadoc段落 这一切都归结为被唤醒的等待线程的数量 一notify 和所有在notifyAll 然而 如果我确实理解这些方法之间的区别的话 总
  • Android 通过按钮打开菜单

    有没有办法让按钮调用子菜单 我目前有一个菜单 如果他们选择其中一个选项 则会打开一个子菜单 但是我希望能够从 Button 小部件而不是 Menu 对象启动子菜单 Thanks 我不一定推荐这样做 但我能够以编程方式调用子菜单 首先 在 o
  • 我需要route53将域绑定到ec2吗?

    大家好 我是 AWS 世界的新手 1 我有一些第三方 不是亚马逊 购买和注册的域名 我在其中设置 DNS 值 2 我有 EC2 微型实例 在面板中我可以找到公共 DNS 和公共 IP 3 我还有route53服务 A记录绑定到2 中的IP
  • React Native - 使用 React Navigation 动态创建导航器

    我正在使用 React Native 构建一个移动应用程序 并使用 React Navigation 在我的应用程序中构建一个导航器 React 导航为我提供了一种处理抽屉内嵌套选项卡栏的好方法 该抽屉也在 Stack Navigator
  • java.net.SocketException:Android 模拟器中的协议不支持地址族

    我正在尝试运行简单的应用程序来从 android 模拟器访问互联网 这是我的代码 我在代理后面 并通过 无线网络 gt APN gt 在模拟器中配置了代理设置 但互联网是通过浏览器而不是应用程序运行的 HttpURLConnection c
  • AWS X 射线追踪在 Node.js 中的传出请求上中断

    嘿 我正在尝试跟踪来自 Express 应用程序的传出请求 但我无法让它工作 当我不使用 AWSXRAY captureHttpsGlobal 函数时 传入请求一切正常 我可以在 服务地图 中看到我的应用程序以及 AWS 上传入的传入请求跟
  • 在捆绑包中找不到名为“Main”的故事板

    我收到一个奇怪的错误 Could not find a storyboard named Main in bundle NSBundle 当尝试在真实的 iOS 设备上运行我的应用程序时 我的目录中有该文件 并且它在模拟器中运行良好 然而
  • Intel HD 3700 linux 的 Java 8 Swing 渲染问题

    我在 Kubuntu 18 04 中用 java 8 update 181 开发了一个应用程序 在我的开发 PC 中 我拥有配备英特尔 HD Graphics 530 的英特尔 i3 6100 所有图形均使用 swing 完成 并且通过此硬