JavaFX项目带VM参数导出exe/可执行jar时缺失运行组件如何解决
JavaFX项目运行报错及打包exe解决方案
问题根因
你运行命令的参数顺序不符合JVM规范:所有JVM参数(包括JavaFX的模块配置)必须放在-jar参数之前,放在jar包路径后的参数会被识别为应用程序的业务参数传入main方法,不会被JVM读取,因此触发JavaFX运行时缺失的报错。
第一步:修复jar包运行命令
替换为以下正确命令即可正常运行jar包:
java --module-path D:\ProjectDirectory\javafx-sdk-11.0.2\lib --add-modules=javafx.controls,javafx.fxml -jar D:\Project.jar
验证jar包正常启动后,再进行exe打包操作。
第二步:打包exe可执行文件的两种可行方案
方案1:JDK官方jpackage工具(推荐,JDK14及以上版本自带)
- 先使用jlink生成包含JavaFX组件的自定义精简运行时镜像:
jlink --module-path D:\ProjectDirectory\javafx-sdk-11.0.2\lib --add-modules javafx.controls,javafx.fxml,java.base --output jre-runtime
- 再调用jpackage打包为exe安装包/绿色可执行文件:
jpackage --input D:\你的jar包存储目录 --main-jar Project.jar --main-class 你的项目主类全限定名 --runtime-image jre-runtime --name 应用名称 --type exe --win-shortcut --win-menu
生成的exe自带精简运行环境,无需用户本地安装Java,双击即可运行。
方案2:使用Launch4j工具打包
- 下载打开Launch4j工具,基础配置页分别填写输出exe路径、待打包的jar包路径
- 切换到JRE配置页,在VM选项输入框中填入你的JavaFX模块参数:
--module-path D:\ProjectDirectory\javafx-sdk-11.0.2\lib --add-modules=javafx.controls,javafx.fxml
- 若需要制作绿色免安装包,可将jre和javafx-sdk的lib文件夹和生成的exe放在同一目录,将module-path改为相对路径
--module-path .\javafx-sdk-11.0.2\lib,整个目录拷贝到任意Windows设备都可直接运行。
注意事项
- 导出jar包时需确保所有第三方依赖都已打入jar包,或和jar包放在同一目录正确配置classpath
- 制作分发版本时所有路径都要使用相对路径,避免本地绝对路径导致其他设备运行报错
内容的提问来源于stack exchange,提问作者Jaime2m1
相关产品推荐
相关产品推荐

