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

2024-10-22 08:28:00
admin
原创
358
摘要:问题描述:我刚刚开始在 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;”来自模块信息,应用程序就会按预期启动......

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

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1502  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1344  
  IPD(Integrated Product Development)流程是一套先进的产品开发管理体系,旨在通过整合跨部门资源,实现产品的高效开发与交付。在IPD流程中,确保项目按时交付是至关重要的,它直接关系到企业的市场竞争力和客户满意度。以下将从多个关键方面探讨如何在IPD流程阶段确保项目按时交付。精准的项目规划项...
IPD流程分为几个阶段   13  
  IPD(Integrated Product Development)流程是一套先进的产品开发管理体系,旨在缩短产品上市时间、提高产品质量、降低成本并增强企业的市场竞争力。深入理解IPD流程阶段的关键要素,对于企业成功实施IPD,实现产品开发的高效运作至关重要。IPD流程的概念与重要性IPD流程强调将产品开发视为一个整...
IPD测试流程   11  
  IPD(Integrated Product Development)产品开发流程是一套先进的、旨在提高产品开发效率与质量的管理体系。在这个体系中,评审环节起着至关重要的作用,它们如同关卡,确保产品在各个阶段都朝着正确的方向前进,符合市场需求和企业战略。其中有四个评审环节尤为关键,它们分别在不同阶段对产品进行全面审视,...
研发IPD流程   16  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用