我刚开始在Linux上编写/测试JavaFX的东西,我在创建一个简单的应用程序时遇到了错误。在Foruns,我发现许多人对此有所了解,但我能找到一个明确的解释,说明它发生的原因。我想了解我的方案中缺少什么才能使其正常工作。
任何建议都将非常感激。
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)
您应该查看this related bug以获取有关如何解决问题的帮助。总之,建议如下:
-Dprism.verbose=true
标志运行应用程序对于使用Eclipse遇到此问题的任何人,可以找到解决方案,将-Dprism.verbose=true
添加到“调试选项”窗口中的JVM参数(如其他回复中已提到的)。之后,缺少的库将列在控制台中。
但是,我解决了从Oracle官方页面下载和安装Java的问题。
https://www.java.com/it/download/
之后,您将在/usr/java/jre-1.8.X_XXX
下找到Java文件夹(这取决于您下载的版本)。
然后,打开Eclipse并从Window-> Preferences-> Java-> Installed JREs使用上面提到的路径添加一个新的JRE。
现在,在项目的构建路径上设置工作区的JRE。
它现在应该工作。
您也可以仅为特定项目设置JRE,在我的情况下作为常规设置更有用。
系统:Fedora 26 64位。 (jre1.8.0_144)。
-Dprism选项帮助打印出一个文件列表:
无法打开共享对象文件:找不到文件或目录。
安装包后,它确实有效。
如果你有openjdk,请尝试更改为jdk。我将java-8-openjdk更改为java-8-jdk。它解决了我的问题。与Oracle JDK相比,OpenJDK不包含某些专有代码,例如,部署组件(Java Web Start,Plugin)完全缺失。此外,JDK和OpenJDK的一些算法的实现是不同的,因为在封闭的部分中使用源代码,其许可证不允许其自由分发。
您需要安装OpenJFX:
apt-get install openjfx
然后运行该程序。
我解决了这个问题,将libswt-gtk-3-java和gkt3添加到我的系统中。
问题可能出在您的旧JRE版本中,该版本不包含所有必需的库,例如libprism_es2.so
或libglass.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位置。那应该够了。
它失败了,因为我没有gtk libs。在启用@assylias提到的-Dprism.verbose=true
之后
我可以找到并安装以下包。
sudo apt-get install libgtk2.0-bin libXtst6 libxslt1.1
它解决了这个问题
就我而言,问题是缺少对64位分发的32位依赖性。
对我来说,以下命令修复了Ubuntu 16.10(x86-64)上的问题:
sudo apt-get install libgtk2.0-0:i386 libxtst6:i386
相关问题:
我找到了一个对我有用的解决方案,堆栈跟踪比这行更多:
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个我复制的文件,这可能因人而异
希望这有助于你们中的一些人
对于那些在ArchLinux上的人:pacman -Sy java-openjfx
没有安装必要的gtk2
包(GTK3不计算在内)。
在全新的Ubuntu 18.10安装中,当在pycharm(社区版)中呈现降价文件的预览时,我遇到了同样的问题。
我下载了一个oracle JRE(jre1.8.0_201)并使用它来代替pycharm附带的jre但我又遇到了同样的问题。
然后添加-Dprism.verbose = true选项,显示缺少libgtk-x11-2.0.so.0。最后sudo apt-get install libgtk2.0-0解决了这个问题。
谢谢,保罗