使用 Launch4j VM 参数路径包装的 JavaFX 项目

JavaFX project wrapped with Launch4j VM arguments path

对于我的一些项目,我将 JavaFX 用于 GUI,在将 JavaFX 拆分为 OpenJFX 之前,我没有遇到任何问题。现在我想使用 JDK 和 JavaFX 的最新版本,因此必须进行一些更改。

在 Eclipse 中工作时,一切正常 运行,我添加了 JavaFX 作为库,但是当我尝试使用 Launch4j 从可运行的 jar 创建 exe 文件时遇到了一些问题。在 Eclipse 中,我使用了 2 个 VM 参数:

  1. --module-path "lib 文件夹的路径\" --add-modules javafx.controls,javafx.graphics,javafx.fxml
  1. --add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED

对于第二个参数,我没有任何问题,因为它不需要库的路径,但第一个需要,而且我不能简单地使用静态路径(例如:C: \MyAppName\lib) 因为用户可以将应用程序安装在他想要的位置,并且也会有库。话虽如此,我可以使用什么作为相对路径,以便 Launch4j 知道该怎么做? lib 文件夹与 exe 位于同一位置。

我尝试了以下但没有成功(我已将它们添加到 JVM 选项框中):

这个问题可能有一些细节可能与我所需要的无关,但也许其他人也有同样的问题,我想添加它们,以便在我得到答案时也能帮助他们。

按照@James_D的建议,我实际上使用了jpackage而不是Launch4j而且更好,它不仅创建了你的exe文件,而且还消除了对用户通过以特定于平台的格式创建本机包来安装 Java。

也就是说,这是关于 Windows 10 OS 的小指南,介绍如何将 jpackage 用于 JavaFX 项目。有关更多信息,请阅读 documentationjpackage 适用于 macOS 和 Linux,但我使用的是 Windows 10,因此该指南是针对它的。

  • 到下面link(官方)下载JavaFX Windows jmods;
  • 对于jpackage您还需要下载WiX Toolset并安装;
  • 为您的项目创建一个运行可用的 Jar。我发现使用 运行nable Jar 而不是普通 jar 更容易,因为您不必稍后指定主要 class。这是个人喜好,不是你必须做的;
  • 在命令 line/Windows PowerShell 中尝试 运行ning jpackage -h 以查看 jpackage 是否正常工作。如果你得到The term 'jpackage' is not recognized as name of a cmdlet,然后打开Environment variables并在System variables/Path 从您的 Java JDK 添加 bin 文件夹的位置。一个简单的方法是在 Windows 搜索栏中搜索 environment,然后选择 Edit the system environment variables,然后环境变量...
  • 之后你可以运行:

jpackage -t exe --name "Name of app" --app-version 1.0 --input "Location of runnable Jar" --dest "Location where the exe will be created" --main-jar "Name of the runnable Jar, with extention .jar at the end" --icon "Complete location where the icon of the app is .ico" --module-path "Location of jmods folder" --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.base --win-shortcut --win-menu

示例:

jpackage -t exe --name "MyApp" --app-version 1.0 --input "D:\Projects\Jars\" --dest "D:\Projects\Executable" --main-jar "Guide.jar" --icon "D:\Projects\Icons\guide.ico" --module-path "D:\Projects\JavaFX\javafx-jmods-16" --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.base --win-shortcut --win-menu

  • 在我的例子中,我使用的是我的个人安装程序应用程序,所以我在 运行ning jpackage 之后所做的就是 运行ning exe 文件被创建,然后从它创建的文件夹中,我复制了该文件夹中的文件(exe 文件,app运行time 文件夹)并将它们粘贴到包含我的项目的所有其他必要文件的位置。这样我就可以对其进行测试,如果它有效,我将继续为它创建安装程序,就像我说的那样,使用我自己的安装程序应用程序。

这个命令有很多选项可以添加,所以请阅读 documentation,以及 运行ning jpackage -h.[=25 的完整选项列表=]

在我的例子中,我将 javafx 放在 jre 目录中,然后 --module-path "jre\jafafx\lib" 获取正确的库:

这是配置:

这是文件树: