0

大家下午好。

当我尝试将 Java 代码作为 Runnable Jar 文件运行时遇到问题。我正在使用 Eclipse,并创建了一个普通的 Java 项目。我将 JavaFX jar 作为用户库包含在内。当我使用 IDE 启动程序时,程序运行没有问题。要创建 Jar 文件,我使用 Runnable Jar 文件中的 Java 项目导出中的构建。当我选中“将所需的库提取到生成的 JAR 中”并运行它时,我收到以下错误消息:

Error: JavaFX runtime components are missing, and are required to run this application

当我检查“将所需的库打包到生成的 JAR 中”并运行它时,我收到以下错误消息:

Graphics Device initialization failed for :  d3d, 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:244)
        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:835)
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.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:567)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:61)
Caused by: 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:835)

有谁知道,为什么我不能运行 JAR 但在 IDE 中它运行正常?

我按照此处的文档https://openjfx.io/openjfx-docs/安装了 JavaFX 。

4

2 回答 2

2

我找到了解决我的问题的方法。当我将库导出到生成的 Jar 中时,我得到了 JavaFX 运行时组件丢失的错误。我现在记得我之前在 Eclipse 中遇到了同样的错误,尽管代码中没有错误并且我使用了 JavaFX 元素。但要启动并运行它,我必须添加 VM Arguments。所以当我想运行程序时,我只需要在命令 promt 中写这个。

假设您已经在构建 Jar 文件的目录中:

java --module-path "C:\Path\to\javafx-sdk-13.0.2\lib" --add-modules javafx.controls,javafx.fxml -jar YourJar.jar

它现在对我有用。希望它也能帮助其他人。

最好的祝愿

于 2020-03-16T11:03:37.647 回答
0

检查您构建的 jar 文件清单文件以查看其依赖项。将有一个名为 Class-path 的变量:您可以通过右键单击 jar 文件并使用 winrar 或普通资源管理器 META.INF 打开来执行此操作 如果它们都以 libs/ 开头,则创建一个 libs 文件夹,您构建的 jar 文件所在的位置并将所有 javafx 指定的 jar 文件复制到该文件夹​​中,然后执行

于 2020-03-12T19:23:34.543 回答