【发布时间】:2021-06-26 14:37:48
【问题描述】:
对于我的一些项目,我将 JavaFX 用于 GUI,在 JavaFX 被拆分为 OpenJFX 之前,我没有遇到任何问题。现在我想同时使用 JDK 和 JavaFX 的最新版本,因此必须进行一些更改。
在 Eclipse 中工作时,一切正常运行,我将 JavaFX 添加为库,但是当我尝试使用 Launch4j 从可运行 jar 创建 exe 文件时遇到一些问题。在 Eclipse 中,我使用了 2 个 VM 参数:
- --module-path "lib 文件夹路径\" --add-modules javafx.controls,javafx.graphics,javafx.fxml
- 这是 原因:java.lang.NoClassDefFoundError: javafx/application/Application
- --add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED
- 这是因为无法访问类 com.sun.glass.ui.Window(在模块 javafx.graphics 中),因为模块 javafx.graphics 不会将 com.sun.glass.ui 导出到未命名的模块
使用第二个参数我没有任何问题,因为它不需要库的路径,但第一个需要,而且我不能简单地使用静态路径(例如:C:\MyAppName \lib) 因为用户可以将应用程序安装在他想要的位置,并且也会有 lib。话虽如此,我可以使用什么作为相对路径,所以 Launch4j 知道该怎么做? lib 文件夹与 exe 位于同一位置。
我尝试了以下但没有运气(我已将它们添加到 JVM 选项框中):
- --module-path "%EXEDIR%\lib" --add-modules javafx.controls,javafx.graphics,javafx.fxml
- --module-path "./lib" --add-modules javafx.controls,javafx.graphics,javafx.fxml
- --module-path "\lib" --add-modules javafx.controls,javafx.graphics,javafx.fxml
这个问题可能有一些细节可能与我需要的东西无关,但也许其他人也有同样的问题,我想添加它们,以便在我得到答案时也能帮助他们。
【问题讨论】:
-
您可以只使用 IntelliJ,它比 Eclipse 好得多,并且它带有用于 JavaFX 项目的集成选项。即使对于 JDK 15 (jetbrains.com/idea),它也几乎可以开箱即用(您仍然必须导入库)它还具有出色的调试器,可以帮助您更快地发现代码中的问题,那您为什么使用 Eclipse 让您的生活变得更艰难?
-
最好的方法是创建一个包含 JVM 的原生包。使用
jlink,您可以创建一个包含JavaFX 模块的JVM。 JDK 14 及更高版本中包含的jpackage工具更进一步,使用“自定义”JVM 创建本机包(因此它本质上结合了jlink和 Launch4j 的功能。请参阅docs.oracle.com/en/java/javase/14/jpackage/… -
@James_D
jpackage看起来确实很棒,它可以满足我的需要,唯一的问题是当我尝试使用它时,我得到 “jpackage”一词是未被识别为 cmdlet 的名称。我确实找到了该命令的使用示例,但没有找到如何实际使用它的示例。现在我已经安装了jdk 16。 -
这听起来像是命令不在路径上。
-
是的,这就是问题所在。我确实在“顶部”PATH 中添加了
jdk\bin,但没有添加 int System variables\PATH。现在它确实工作了,但是当我尝试 exe 时,我无法启动 JVM。
标签: java javafx launch4j openjfx