有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java开放。mac上使用JDK 11的jar文件失败,出现RuntimeException

我正在试着开一个新的商店。在我的MacMojave10.14上的jar文件(https://github.com/ptrckbnck/SQLChecker/releases),我的大学课程需要它

我所做的:

java -version

openjdk version "11.0.1" 2018-10-16  
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)  
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)  

但是当我运行java -jar SQLChecker-1.0.jar时,我会不断得到以下异常:

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:280)
at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222)
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
... 1 more
Exception in thread "main" java.lang.RuntimeException: No toolkit found
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:834)

我已经阅读了相关的线程Migration to JDK 11 + JavaFX 11 giving RuntimeException,并从这里https://gluonhq.com/products/javafx/下载了JavaFX11,即JavaFXMacOSXSDK。我还运行以下代码:

export PATH_TO_FX=my/path/to/javafx-sdk-11/lib

并使用JavaFX11运行HelloWorld测试,如下所述https://openjfx.io/openjfx-docs/。一切正常,但并没有解决我原来的问题。 正如相关线程中@Drimux所建议的,OpenJDK发行版中缺少一些库。他感到悲哀的是,这些可能是利伯里斯。dylib,libprism_sw。迪利布,利布格拉斯。dylib,libjavafx_字体。动态库。因此,我将这些文件从javafx-sdk-11.0.1/lib复制到/Library/Java/JavaVirtualMachine/jdk-11.0.1。jdk/Contents/Home/lib并尝试运行my。jar文件。获得新异常:

GLFactory.static - Platform: Mac OS X - not available: com.sun.prism.es2.MacGLFactory
java.lang.ClassNotFoundException: com.sun.prism.es2.MacGLFactory
at   java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:315)
at com.sun.prism.es2.GLFactory$FactoryLoader.run(GLFactory.java:108)
at com.sun.prism.es2.GLFactory$FactoryLoader.run(GLFactory.java:100)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at com.sun.prism.es2.GLFactory.<clinit>(GLFactory.java:97)
at com.sun.prism.es2.ES2Pipeline.<clinit>(ES2Pipeline.java:76)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:315)
at com.sun.prism.GraphicsPipeline.createPipeline(GraphicsPipeline.java:187)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:91)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
at java.base/java.lang.Thread.run(Thread.java:834)
java.lang.ClassNotFoundException: com.sun.glass.ui.mac.MacPlatformFactory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:315)
at com.sun.glass.ui.PlatformFactory.getPlatformFactory(PlatformFactory.java:42)
at com.sun.glass.ui.Application.run(Application.java:144)
at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:258)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:269)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:834)
Failed to load Glass factory class
Exception in thread "main" java.lang.NullPointerException
at com.sun.glass.ui.Application.run(Application.java:144)
at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:258)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:269)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:834)

这并没有解决问题。如果您需要更多信息,请询问。 我还应该尝试什么


共 (1) 个答案

  1. # 1 楼答案

    如果您已经从第一个测试release下载了jar,那么在运行它时:

    java -jar SQLChecker-1.0.jar
    

    您将获得发布的异常

    作为第一个简单的解决方案,如果您下载了JavaFX 11SDK,请运行以下命令:

    java  module-path /path-to/javafx-sdk-11/lib  add-modules javafx.controls,javafx.fxml -jar SQLChecker-1.0.jar
    

    您可以阅读关于为什么需要这些VM参数here

    在任何情况下,都不应该将本机文件从JavaFXSDK复制到JDK

    新版本

    但是SQLChecker还有两个新版本

    如果您尝试最后一个one

    java -jar SQLChecker-1.0.3.jar
    

    这很好,不需要添加额外的参数

    那么,发生了什么变化

    他们正在分发一个带有Maven shade插件的胖Jar,为了在任何平台上使用JavaFX11,您不仅需要包含Jar,还需要包含本机库

    如您所见,在这个commit中,通过包含javafx.graphicsclassifier标记,他们添加了Windows、Linux和Mac所需的本机库,正如本question中所述

    如果您想了解更多关于如何创建胖罐子的信息,请参阅此doc