JavaFX导出jar运行报NoClassDefFoundError: javafx/application/Application如何解决
问题原因
你在IntelliJ中配置的VM选项仅对IDEA本地运行场景生效,导出的jar包独立运行时不会携带这些配置,且默认不会将JavaFX依赖打包进jar,因此JVM无法找到JavaFX相关类,抛出该错误。
解决方案
你可以选择以下任意一种方式解决:
方式1:打包包含所有依赖的可执行Fat Jar(推荐,无需运行环境额外安装JavaFX)
- 打开IDEA的
File > Project Structure > Artifacts,点击+号选择JAR > From modules with dependencies - 主类选择你编写的
Launcher类(不要选择继承了Application的Main类,避免JavaFX模块校验报错) - 在右侧的Available Elements列表中,将所有JavaFX相关依赖(javafx.base、javafx.controls、javafx.fxml、javafx.graphics等你项目用到的库)全部拖入左侧的jar根目录中
- 如果你项目中有
module-info.java文件,需补充完整模块声明,示例如下:
module 你的模块名 { requires javafx.controls; requires javafx.fxml; requires javafx.graphics; // 开放你的代码包给javafx.fxml做反射调用,否则FXML加载会失败 opens 你的项目包名 to javafx.fxml; exports 你的项目包名; }
- 重新构建导出jar即可直接运行
方式2:运行时手动指定JavaFX参数
如果你不想修改打包配置,运行jar时需手动指定JavaFX SDK路径和需要引入的模块,命令格式如下:
java --module-path 你的JavaFX SDK下lib文件夹的绝对路径 --add-modules javafx.controls,javafx.fxml,javafx.graphics -jar 导出的jar包名称.jar
额外排查点
导出jar后可以用解压工具打开jar包,确认fxml/InserimentoPorta.fxml文件存在于jar的根目录下,避免后续出现FXML资源找不到的错误。
内容的提问来源于stack exchange,提问作者Domenico D'Orsi
相关产品推荐
相关产品推荐

