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

2023-12-26

对于我的一些项目,我使用 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
  • 这是为了引起原因:java.lang.NoClassDefFoundError:javafx/application/Application
  1. --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)因为用户可能会在他想要的地方安装应用程序,并且也会有库。话虽这么说,我可以使用什么作为相对路径,以便 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
  • --模块路径“\lib”--添加模块javafx.controls,javafx.graphics,javafx.fxml

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


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

话虽如此,这是有关如何使用 Windows 10 操作系统的小指南jpackage与 JavaFX 项目。欲了解更多信息,请阅读文档 https://docs.oracle.com/en/java/javase/14/jpackage/packaging-overview.html#GUID-C1027043-587D-418D-8188-EF8F44A4C06A. jpackage适用于 macOS 和 Linux,但我使用的是 Windows 10,因此该指南是专门针对它的。

  • 前往以下链接(官方)并下载JavaFX Windows jmods https://gluonhq.com/products/javafx/;
  • For jpackage你还需要下载WiX 工具集 https://wixtoolset.org/,然后安装;
  • 为您的项目创建一个可运行的 Jar。我发现使用 runnable Jar 而不是普通的 jar 更容易,因为您不必稍后指定主类。这是个人喜好,而不是您必须做的;
  • 尝试跑步jpackage -h在命令行/Windows PowerShell 中查看是否jpackage工作中。如果你得到术语“jpackage”未被识别为 cmdlet 的名称,然后打开环境变量 and in 系统变量/路径添加 Java JDK 中 bin 文件夹的位置。一个简单的方法是通过搜索环境在 Windows 搜索栏中,然后选择编辑系统环境变量, then 环境变量...
  • 之后你可以运行:

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

Example:

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 file, app and runtime文件夹)并将它们与我的项目的所有其他必需文件一起粘贴到该位置。这样我就可以测试它,如果它有效,我将继续为其创建安装程序,就像我说的,使用我自己的安装程序应用程序。

该命令有很多可以添加的选项,因此请阅读文档 https://docs.oracle.com/en/java/javase/14/jpackage/packaging-overview.html#GUID-786E15C0-2CE7-4BDF-9B2F-AC1C57249134,以及运行选项的完整列表jpackage -h.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Launch4j VM 参数路径包装的 JavaFX 项目 的相关文章

  • 何时/为何使用/定义接口[重复]

    这个问题在这里已经有答案了 可能的重复 何时最好使用 java 中的接口 https stackoverflow com questions 2586389 when best to use an interface in java Hi
  • 如何让Spring RabbitMQ创建一个新的队列?

    根据我对rabbit mq的 有限 经验 如果您为尚不存在的队列创建新的侦听器 则会自动创建该队列 我正在尝试将 Spring AMQP 项目与rabbit mq 一起使用来设置侦听器 但出现错误 这是我的 xml 配置
  • 在 IntelliJ 上进行 Google App Engine Java 开发?

    令人烦恼的是 Google App Engine 已成为其中的另一个项目 他们只发布 Eclipse 插件 如 Spring Webflow 而我更喜欢 IntelliJ 你能用IntelliJ成功运行本地测试环境吗 并调试 部署本地或实时
  • @OneToMany 与 @JoinTable 错误

    我试图理解 OneToMany with JoinTable 对于这样的场景 我正在使用 JPA 2 1 Hibernate 5 0 4 和 Oracle 11 XE 当我打电话时userDao save user 下面的代码 我有 jav
  • 哈希码是否用于加速集合中的对象查找?

    IIUC 相同类型的两个不同对象可以存储在 HashSet 中 即使两个对象在以下情况下返回相同的值 hashCode 叫做 例如根据本文 https eclipsesource com blogs 2012 09 04 the 3 thi
  • 正确使用 JDBC 连接池 (Glassfish)

    我需要在 Java Web 服务中作为会话 bean 实现数据库连接 但我不确定我这样做是否正确 我创建了一个类 public final class SQLUtils private static DataSource m ds null
  • 尝试在java中的Arraylist中查找对象的所有出现

    我有一个 Java ArrayList 我需要查找其中出现的所有特定对象 ArrayList indexOf Object 方法只找到一次出现 所以看来我还需要其他东西 我认为你不需要太花哨 以下应该可以正常工作 static
  • 从关卡堆栈中获取相对比例的数学

    为这个可怕的标题道歉 我花了 10 分钟试图用一句话来解释这一点 但失败了 虽然提示这个问题的应用程序是用Java Android 编写的 但我认为它非常通用并且适用于任何语言 欢迎使用伪代码 或简单的英语 回复 我不确定是否应该标记所有通
  • 在 eclipse 之外将 Spring MVC 应用程序部署到 tomcat 的幕后会发生什么?

    我猜想使用像 eclipse 这样很棒的 IDE 的一个缺点是你会忽略应用程序幕后发生的事情 我是一名 Ruby 开发人员 所以不是一名 Java 老手 所以我一直在用 java 编写一个项目 并使用 spring 框架进行 IOC 和 M
  • 如何通过子 POJO 的属性过滤复合 ManyToMany POJO?

    我有两个像这样的房间实体 Entity public class Teacher implements Serializable PrimaryKey autoGenerate true public int id ColumnInfo n
  • 如何使用 Guava 连接字符串?

    我写了一些代码来连接字符串 String inputFile for String inputLine list inputFile inputLine trim 但我不能使用 连接 所以我决定使用 Guava 所以我需要使用Joiner
  • HTTP PUT 在 Java 中上传文件

    Edit 我想我已经弄清楚如何执行二进制数据部分 仔细检查代码 但我很确定我做对了 现在 当我尝试按照中所述完成上传时遇到新错误Vimeo API 文档 http vimeo com api docs upload streaming Ed
  • Java ConcurrentModificationException [重复]

    这个问题在这里已经有答案了 当删除倒数第二个元素时 没有 ConcurrentModificationException List
  • 战争库中的罐子爆炸

    我们可以将分解的 jar 文件放入 war web inf 库中吗 它在 JBOSS 4 2 中对我不起作用 我收到以下错误并且无法部署应用程序 Caused by javax management RuntimeOperationsExc
  • 找不到符号assertEquals

    我正在尝试为计算器编写第一个单元测试 但 NetBeans 说它找不到该符号assertEquals和注释 Test 我应该包括一些东西吗 我正在使用 NetBeans 7 3 1 和 W7 package calculator impor
  • scala中的协变类型参数需要在java接口中保持不变

    我有一个看起来像这样的特征 一些进一步的信息可以在我自己提出了这个相关问题 https stackoverflow com questions 3695990 inheritance and automatic type conversio
  • 读/写带有特殊字符的.txt文件

    I open Notepad Windows 并写 Some lines with special characters Special 并前往另存为 someFile txt 与Encoding set to UTF 8 在Java中我有
  • JMockit - 初始化问题

    当我使用以下测试时 我收到警告 警告 JMockit 是按需初始化的 这可能会导致某些测试失败 请检查文档以获取更好的初始化方法 这是我的测试实现 package test import static mockit Mockit impor
  • H2 用户定义的聚合函数 ListAgg 不能在第一个参数上使用 DISTINCT 或 TRIM()

    所以我有一个 DB2 生产数据库 我需要在其中使用可用的函数 ListAgg 我希望使用 H2 的单元测试能够正确测试此功能 不幸的是H2不直接支持ListAgg 但是 我可以创建一个用户定义的聚合函数 import java sql Co
  • Libgdx 和 Google 应用内购买结果

    我遵循了这些指示 https github com libgdx libgdx wiki Interfacing with platform specific code使用 ActionResolver 接口集成 Libgdx 和原生 An

随机推荐

  • 在 android studio 中编译项目时出现重复条目​​:com/android/volley/AuthFailureError.class

    我正在使用外部库 payu Money sdk 和 linkedin sdk 两者都使用 volley 库 在编译项目时会给出 AuthFailureError class 的重复条目 错误 任务 app packageAllDebugCl
  • AndroidHttpClient 和 DefaultHttpClient

    这两者之间有很大区别吗 最好使用哪一个 基于Android源码 https github com CyanogenMod android frameworks base blob gingerbread core java android
  • const 后出现意外的令牌

    当我尝试指定一个常量时 我 在 React 中遇到了意外的令牌错误 但我似乎无法弄清楚原因 我的代码非常简单 并且我遵循了react bootstrap示例here https react bootstrap github io compo
  • 如何在使用 fstream 打开文件时截断文件

    我知道可以用以下命令截断文件 std fstream fs mypath std fstream out std fstream trunc 但我需要读取文件 截断它 然后使用相同的文件句柄写入新内容 因此整个操作是原子的 任何人 我不认为
  • Rails 用户:您使用什么异常通知软件?

    我见过 Ryan Bates 谈论过异常记录器和异常通知 还有其他好的可以考虑吗 您喜欢和不喜欢这些内容的哪些方面 另外 如果您捕获这些异常通知程序 它们是否会记录异常 Thanks 我强烈推荐使用Hoptoad http hoptoada
  • wget 拒绝仍然下载文件

    我只想要文件夹结构 但我不知道如何使用 wget 相反 我正在使用这个 wget R pdf css gif txt png np rhttp example com http example com 它应该拒绝 R 之后的所有文件 但在我
  • 为 kendo ui 网格列定义自定义模板

    我有一个 kendo ui 网格 我想绑定图像 这是我的代码 model List
  • APScheduler(高级 Python 调度程序)导入错误:没有名为调度程序的模块

    我遇到以下导入错误 导入错误 没有名为调度程序的模块 当我运行以下 python 脚本时 Demonstrates how to use the blocking scheduler to schedule a job that execu
  • 如何在React Native中离线捆绑iOS?

    任何人都可以解释一下如何从 反应本机 代码生成 iOS 应用程序的离线包吗 我已经尝试过了如何为react native生成 ipa文件 https stackoverflow com questions 41970435 how to g
  • 如何递归连接字符串元素列表

    我正在查看准备考试的示例 坦率地说 我不太擅长递归或列表 尤其是列表 给定一个节点类 它将保存字符串 不是通用的 编写一个名为 concat 的递归 java 函数 该函数采用表示链表头的节点 并返回表示链表中所有元素的串联的字符串 如果链
  • 对列表进行子集化 - plyr 方式?

    我经常拥有按一个或多个变量分组的数据 每组内有多个注册 从数据框中 我希望根据各种标准选择组 我通常使用 split sapply rbind 方法 其中使用逻辑向量从列表中提取元素 这是一个小例子 我从一个包含一个分组变量 组 的数据框开
  • 如何在 Jenkins (VS2012) 中运行发布/点击一次构建步骤

    我们有一个简单的 C 解决方案 VS 2012 它有一个发布步骤 单击一次向导 使用 ftp 我已经设置了一个 jenkins 构建项目来在 SVN 触发器上构建它 通过 MSBuild 我无法让它构建 通过 MSBuild 发布 单击一次
  • WPF 嵌套 Scrollviewers - 将控制权交还给父级 scollviewer

    这就是我的控制树的样子
  • Android P 预览上的 toast View 的 IllegalStateException

    在尝试发布我的应用程序进行生产时 预发布报告通知我 Pixel 2 Android P Preview 设备上出现错误 该错误与我的自定义 toast 消息有关 该消息表示视图 已添加到窗口管理器 java lang IllegalStat
  • 不用sudo重启nginx?

    所以我希望能够在不输入任何密码的情况下进行 cap deploy 我已经设置了所有私钥 这样我就可以很好地访问远程服务器 并且现在使用 svn over ssh 所以那里没有密码 我还有最后一个问题 我需要能够重新启动 nginx 现在我有
  • 导入 javax.validation.constraints.NotEmpty;不工作[重复]

    这个问题在这里已经有答案了 我目前有一个 java spring boot 应用程序 我将版本 在代码中 从 2 1 4 更改为 2 3 0 但结果我遇到了错误error package javax validation constrain
  • android服务导出属性?

    我对android平台还很陌生 我想导出我的服务以供公众使用 我在开发人员文档中找到了一些内容 android exported其他应用程序的组件是否可以调用该服务或与其交互 如果可以 则为 true 如果不能 则为 false 当值为 f
  • 为闪亮仪表板中的滑块添加不同的静态颜色

    我是闪亮的新手 我想为滑块提供静态颜色 无论闪亮仪表板中选择的范围如何 我想要滑块有不同的颜色 如下所示 例如 0 到 40 红色 40 到 60 蓝色 60 到 100 绿色 请帮我解决这个问题 我的代码 library shiny li
  • 为什么更喜欢模板方法而不是依赖注入?

    我一直在阅读 Gamma 等人写的 设计模式 我有一个关于模板方法与依赖注入相比的问题 使用模板方法 您可以使用为所需操作或计算提供替代方案的策略来 模板化 类 因此 您不需要从多种替代方案中选择一种策略并将该策略编码到类中 而是允许类的用
  • 使用 Launch4j VM 参数路径包装的 JavaFX 项目

    对于我的一些项目 我使用 JavaFX 作为 GUI 在 JavaFX 被拆分为 OpenJFX 之前 我没有遇到任何问题 现在我想使用最新版本的 JDK 和 JavaFX 因此必须进行一些更改 在 Eclipse 中工作时 一切都按预期运