# 问题描述

在本地编辑器运行 JavaFX 应用程序时,可以正常运行,但是当我们将 JavaFX 打包成 jar 包以后,用命令打开时,会提示 JavaFX 报错缺少 JavaFX 运行时组件

java -jar xx.jar

# 原因分析:

因为 Java 8 之后,JavaFX 从 JDK 中分离了出来,在 Java 9 时,Java 引入了 Java 模块系统。从那之后,JavaFX 需要使用 Java 模块系统来运行 JavaFX。作者是用的 Java17 写的,在本地的 Java17 中,没有 JavaFX,因为 JavaFX 从 JDK 分离了,所以用 Java 命令打开时不能正常打开 jar 包。

# 解决方案:

# 方法一、Java 模块系统

构建 Java 模块系统需要在顶级目录中添加一个模块声明文件 module-info.java

# 方法二、使用引导类

作者在操作时,将 Java 模块系统删除之后再用引导类,还是报错,我恢复 module-info.java 后再使用引导类,就可以正常打开了

使用引导类来启动真正的主类,如下图所示:
Main.java

App.java

注意:用引导类之后,MANIFEST.MF 的 Main-Class 也要改为引导类

# 方法三、使用 Java8(自带 JavaFX)不推荐

因为 JavaFX 项目至少需要 Java11,Java8 虽然自带 JavaFX 很方便,但是适配性较差
ps: 当然也可以用 java8 创建 JavaFX 项目,这就不演示了