Linux 上的 JavaFX 显示“图形设备初始化失败:es2,sw”

2024-10-22 08:28:00
admin
原创
87
摘要:问题描述:我刚刚开始在 Linux 上编写/测试 JavaFX 内容,在启动一个简单的应用程序时遇到了错误。我在论坛上发现很多人对此表示担忧,但我找不到关于发生这种情况的原因的清晰解释。我想了解我的场景中缺少什么才能使其正常工作。如有任何建议,我们将不胜感激。环境信息:java version &qu...

问题描述:

我刚刚开始在 Linux 上编写/测试 JavaFX 内容,在启动一个简单的应用程序时遇到了错误。我在论坛上发现很多人对此表示担忧,但我找不到关于发生这种情况的原因的清晰解释。我想了解我的场景中缺少什么才能使其正常工作。

如有任何建议,我们将不胜感激。

环境信息:

java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b123)
Java HotSpot(TM) Client VM (build 25.0-b65, mixed mode)

Linux MYServer 2.6.21-1.3228.fc7 #1 SMP Tue Jun 12 15:37:31 EDT 2007 i686 i686 i386 GNU/Linux

例外:

Graphics Device initialization failed for :  es2, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
        at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:300)
        at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:244)
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:179)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:210)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:653)
        at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:314)
        at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:98)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:128)
        at java.lang.Thread.run(Thread.java:744)
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: No toolkit found
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:191)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:210)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:653)
        at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:314)
        at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305)

解决方案 1:

您应该查看此相关错误,以获取有关如何解决问题的帮助。总之,建议如下:

  • -Dprism.verbose=true使用标志运行应用程序

  • 检查生成的详细日志

  • 它可能指向缺少的图形库:在 Linux 上运行 JavaFX 需要 GTK 2.18

解决方案 2:

您需要安装 OpenJFX:

apt-get install openjfx

然后运行该程序。

解决方案 3:

我通过将 libswt-gtk-3-java 和 gkt3 添加到我的系统来解决这个问题。

解决方案 4:

问题可能出在你的旧 JRE 版本中,它不包含所有必要的库,例如libprism_es2.solibglass.so,它们应该位于`/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64.
To check if this is the issue compile your Main.java`控制台中的类中

javac Main.java  
java -Dprism.verbose=true Main

输出可能应该是java.lang.UnsatisfiedLinkError: Can't load library: /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libprism_es2.so

从 Oracle 官方网站下载最新的 JRE,并将 lib 文件夹复制到您当前的 JRE 位置。这样就足够了。

解决方案 5:

我失败了,因为我没有 gtk 库。启用-Dprism.verbose=true@assylias 提到的功能后

我可以找到并安装以下软件包。

sudo apt-get install libgtk2.0-bin libXtst6 libxslt1.1

它解决了问题

解决方案 6:

如果您像原始提问者一样使用 Java 8,则需要安装 Oracle JDK 8(祝你好运),或者安装 OpenJFX 8 以配合 OpenJDK 8。

目前,我可以提供针对 Ubuntu 18.x 的确切说明。它们也可能适用于其他基于 Debian 的系统。如果您使用的是其他操作系统,也许下面列出的软件包名称会为您指明正确的方向。

首先,您需要确定您的发行版上有哪些版本的 OpenJFX。从命令行运行此命令:

$ apt-cache policy openjfx

版本表部分,您可能会看到两个选项。我目前看到的是11.0.2+1-1~18.04.28u161-b12-1ubuntu2。以 11 开头的版本是默认版本,即使您(可能)安装了openjdk-8-jdk。您需要以数字 8 开头的版本。在撰写本文时,这是8u161-b12-1ubuntu2

要安装 OpenJFX 和相关软件包(假设您正在进行开发工作),首先确保您已卸载所有基于 Java 11 的软件包,因为它们会与 JDK 8(不)愉快地共存,并给您带来很多问题。

$ sudo apt remove openjfx openjfx-source libopenjfx-java libopenjfx-jni

接下来,安装正确的版本(policy用查询中列出的任何版本替换8u161-b12-1ubuntu2):

$ sudo apt install openjfx=8u161-b12-1ubuntu2 openjfx-source=8u161-b12-1ubuntu2 libopenjfx-java=8u161-b12-1ubuntu2 libopenjfx-jni=8u161-b12-1ubuntu2

更新:第二天我注意到sudo apt upgrade(或自动系统更新)会“升级”我精心选择的版本的 jfx 软件包。以下是如何防止这种情况发生:

$ sudo apt-mark hold openjfx openjfx-source libopenjfx-java libopenjfx-jni
openjfx set on hold.
openjfx-source set on hold.
libopenjfx-java set on hold.
libopenjfx-jni set on hold.

您可以sudo apt showhold随时运行来列出被保留的包裹。

安装这些虽然老旧但效果很好的软件包后,我的所有问题都解决了。希望它们也能帮到你。

解决方案 7:

我找到了一个对我有用的解决方案,堆栈跟踪包含的内容不只这一行:

Graphics Device initialization failed for :  es2, sw.

向上滚动,你会发现如下一行:

Caused by: java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: Can't load library: /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libglass.so

现在从 oracle 下载新的 jdk,将丢失的文件从那里复制到丢失文件的文件夹中。

我复制的文件总共丢失了 3 个,这可能因人而异

希望这对你们有所帮助

解决方案 8:

就我而言,问题是 64 位发行版缺少 32 位依赖项。

对我来说,以下命令修复了 Ubuntu 16.10(x86-64)上的问题:

sudo apt-get install libgtk2.0-0:i386 libxtst6:i386

相关问题:

  • Ubuntu 64 位 Machinarium:加载共享库时出错:libgtk-x11-2.0.so.0

  • 找不到/安装 libXtst.so.6?

解决方案 9:

对于 ArchLinux 用户:
pacman -Sy java-openjfx没有安装必要的gtk2软件包(GTK3 不算)。

解决方案 10:

在全新安装的 Ubuntu 18.10 上,我在 pycharm(社区版)中呈现 markdown 文件的预览时遇到了同样的问题。

我下载了 oracle JRE(jre1.8.0_201)并使用它来代替 pycharm 附带的 jre,但我再次遇到了同样的问题。

然后添加了 -Dprism.verbose=true 选项,结果显示缺少 libgtk-x11-2.0.so.0。最后 sudo apt-get install libgtk2.0-0 解决了这个问题。

谢谢,保罗

解决方案 11:

对于在使用 Eclipse 时遇到此问题的人,解决方案是将-Dprism.verbose=trueJVM 参数添加到“调试选项”窗口(如其他回复中所述)。之后,缺少的库将列在控制台中。

不过,我通过从 Oracle 官方页面下载并安装 Java 解决了这个问题

https://www.java.com/it/download/

此后,您将在下面找到 Java 文件夹/usr/java/jre-1.8.X_XXX(取决于您下载的版本)。

然后,打开 Eclipse 并从 Window->Preferences->Java->Installed JREs 使用上面提到的路径添加一个新的 JRE。

现在,在项目的构建路径上设置工作区的 JRE。

现在它应该可以工作了。

您还可以仅为特定项目设置 JRE,就我而言,作为常规设置更有用。

系统:Fedora 26 64位。(jre1.8.0_144)。

解决方案 12:

然后 -Dprism 选项会打印出文件列表:

无法打开共享对象文件:未找到文件或目录。

  1. libgtk-x11-2.0.so.0

  2. libXxf86vm.so.1

  3. 库GL.so.1

安装软件包后它确实起作用了。

解决方案 13:

假设您已正确设置 JavaFX,您只需将以下行添加到VM 选项中:

-p %path to javafx%/lib --add-modules javafx.controls,javafx.fxml

要在 IntelliJ 中编辑 VM 选项,您需要打开运行/调试配置

(当然,将%path 更改为 javafx%,以便它指向您的 JavaFX 文件夹位置)

解决方案 14:

我在 上收到此错误消息Ubuntu 20.04。以下是对我有用的方法。我去 Zulu 下载了 jdk 11。我选择的 java 版本为 11,Java 包为JDK FX。安装.deb文件后,我在 上设置了 $JAVA_HOME .zshrc

export JAVA_HOME=/usr/lib/jvm/zulu-fx-11-amd64
export PATH=$JAVA_HOME/bin:$PATH

这解决了我的问题。

解决方案 15:

我也遇到了这个问题。对我来说,问题是我下载了 aaarch64 版本的 fx 全局库。您所要做的就是下载它的 x64 版本。尝试再次运行您的代码,它可能会起作用,对我来说确实如此。:)

下载 fx lib 文件的链接:https ://gluonhq.com/products/javafx/

解决方案 16:

JavaFX aarch64 版本是导致我的计算机出现此问题的原因。 切换到 x64 版本后问题得到解决。

解决方案 17:

我遇到了同样的错误,但这是使用一个简单的 FX 应用程序时出现的,我检查发现这种依赖关系是导致此错误的主要原因:

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-graphics</artifactId>
    <version>17.0.1</version>
    <classifier>linux</classifier>
</dependency>

一旦我评论过,并且还评论过,这个“需要javafx.graphics;”来自模块信息,应用程序就会按预期启动......

是的,这很奇怪,但这就是这里的运作方式

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用