繁体   English   中英

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

[英]JavaFX project wrapped with Launch4j VM arguments path

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

在 Eclipse 中工作时,一切正常运行,我添加了 JavaFX 作为库,但是当我尝试使用可运行的 Z68995FCBF432492D15484DACj.ZD9 创建 exe 文件时遇到一些问题在 Eclipse 我使用 2 VM arguments:

  1. --module-path "lib 文件夹的路径\" --add-modules javafx.controls,javafx.graphics,javafx.fxml
  • 这是由于:java.lang.NoClassDefFoundError: javafx/application/Application
  1. --add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED
  • this is for cannot access class com.sun.glass.ui.Window (in module javafx.graphics) because module javafx.graphics does not export com.sun.glass.ui to unnamed module

使用第二个参数我没有任何问题,因为它不需要 lib 的路径,但第一个需要,而且我不能简单地使用 static 路径(如: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

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

根据@James_D 的建议,我实际上使用了jpackage而不是Launch4j ,它更好,不仅它创建了您的 exe 文件,而且还消除了用户安装 Java 的需要,方法是创建一个平台特定格式的本机 package。

话虽如此,这是 Windows 10 操作系统的小指南,介绍如何将jpackage与 JavaFX 项目一起使用。 有关更多信息,请阅读文档 jpackage适用于 macOS 和 Linux,但我使用的是 Windows 10,因此该指南是针对它的。

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

  • 在我的情况下,我正在使用我的个人安装程序应用程序,所以我在运行jpackage后所做的是我正在运行它创建的 exe 文件,然后从它创建的文件夹中,我从该文件夹( exe文件,应用程序运行时文件夹)并将它们与我的项目的所有其他必要文件一起粘贴到该位置。 这样我就可以对其进行测试,如果它有效,我将继续为它创建安装程序,就像我说的那样,使用我自己的安装程序应用程序。

这个命令有很多你可以添加的选项,所以阅读文档,通过运行jpackage -h来阅读完整的选项列表。

就我而言,我将 javafx 放在 jre 目录中,并且 --module-path "jre\jafafx\lib" 获取正确的库:

这是配置:这是我的配置 1

这是文件树: 在此处输入图像描述

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM