【发布时间】:2021-04-27 17:59:13
【问题描述】:
我在将我的 JavaFX 项目部署到 .jar 或 .exe 文件以轻松执行它(并达到项目要求)时遇到问题。 我试图让它作为 .jar 文件工作,因为我认为这是更简单的方法,但也许我错了,所以如果你能帮助我解决这个问题,那就太棒了。
我已经尝试使用 Intellij 的 Artifacts,但这不起作用。我收到一条错误消息,上面写着“错误:JavaFX 运行时组件丢失,需要运行此应用程序”。 然后我尝试使用在 Internet 上找到的另一种方式:https://github.com/openjfx/samples/tree/master/CommandLine/Non-modular/CLI,但这会导致在尝试将其打包到 .jar 文件时得到完全相同的消息。
我在我现有的项目和一个全新的项目上尝试了以上所有方法,当你创建一个新的 JavaFX 项目时,除了 Intellij 的预先编写的东西之外,里面什么都没有。
我的项目不存在 Maven 或 Gradle,我只有一个基本的 JavaFX 项目(JavaFX 15 和 Java 15)和一个额外的库:org.json:json 版本 20201115
我希望这些信息足以让您了解我的问题并希望对我有所帮助,但如果不只是询问您需要什么,我会尽力提供给您。
感谢您的帮助:)
最好的问候
马克西
编辑:与下方评论相关的错误消息
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 javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:244)
at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:261)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
at java.base/java.lang.Thread.run(Thread.java:832)
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:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071)
Caused by: java.lang.RuntimeException: No toolkit found
at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:273)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
... 5 more
【问题讨论】:
-
既然已经在使用 Java 15,为什么还要使用过时的 JavaFX 11?
-
我想是因为 javafx 11 是为了长期支持,但你建议升级到 javafx 15 吗?这会很容易完成并帮助我实现获得可以运行的罐子的目标吗?
-
第一步是使用jlink创建自定义jre。然后使用平台相关(本机)启动器来启动 jvm,并为您的应用程序提供适当的参数。最后,制作一个安装包(本机)来复制客户端机器上的所有内容。
-
@mrmcwolf 我尝试创建一个新项目来逐步测试,如openjfx.io/openjfx-docs/#IDE-Intellij 中所述(在 IDE 的模块化下),但如果我从第 7 步运行最后一个命令,我会收到错误 ->我将错误消息添加到我的问题中
-
@Maxi 使用最新的 javafx。
标签: java javafx deployment jar