JavaFX加载FXML失败的根本原因是模块路径或模块名配置错误,必须确保--module-path指向含javafx.controls.jar等实际jar文件的目录,且--add-modules参数严格匹配模块名(如javafx.controls,javafx.fxml),中间无空格。

直接加 --add-modules 本身不能“解决”缺失问题,它只是告诉 JVM:“请加载这些模块”。真正起作用的前提是:模块本身得存在、路径得对、名字得准。否则就会报 Module javafx.controls not found 这类错误。
确认 JavaFX 模块是否真实可访问
这是最关键的一步。很多人把 --module-path 指向 Maven 本地仓库的根目录(如 C:\Users\彭文捷\.m2\repository\org\openjfx),但这个目录下并没有 javafx.controls.jar,只有按模块名和版本号分层的子文件夹(比如 javafx-controls\20.0.2\)。JVM 不会自动递归扫描子目录。
- 正确做法:找到实际含
.jar文件的目录,例如:C:\Users\彭文捷\.m2\repository\org\openjfx\javafx-controls\20.0.2\javafx-controls-20.0.2.jar
然后把--module-path指向其**父目录**(即20.0.2文件夹),或更推荐——把所有 JavaFX 的.jar集中复制到一个干净文件夹(如D:\javafx\lib),再指向该lib目录。 - 快速验证:在命令行运行
dir /s *.jar,确认目标路径下确实存在javafx.controls.jar、javafx.fxml.jar等文件。
--add-modules 的写法必须严格匹配模块名
JavaFX 各模块的正式名称是固定的,不能靠猜测或删减。常见模块包括:
-
javafx.controls(按钮、表格、对话框等 UI 控件) -
javafx.fxml(FXML 加载支持) -
javafx.graphics(底层绘图与窗口管理,几乎所有应用都需) -
javafx.web(WebView 组件,按需添加) - 多个模块用英文逗号分隔,中间**不能有空格**:
--add-modules javafx.controls,javafx.fxml,javafx.graphics
IDE 运行配置中的典型陷阱
在 IntelliJ IDEA 或 Eclipse 中,光在 “VM options” 里填参数还不够,容易踩坑:
- 确保你编辑的是 **运行配置(Run Configuration)**,而不是编译或构建设置;
- 路径中含空格时,
--module-path值必须用英文双引号包裹,例如:--module-path "D:\My Libs\javafx-sdk-20.0.2\lib"; - 如果项目用了
module-info.java,还需在其中显式声明requires javafx.controls;等语句,否则模块系统可能拒绝链接; - 若使用 Maven,建议改用
javafx-maven-plugin,它能自动生成带完整模块参数的运行命令,避免手动出错。
命令行运行 JAR 包的最小可行命令
假设你的 JavaFX SDK 解压在 C:\javafx\lib,应用 JAR 是 myapp.jar,且用到了 FXML 和基础控件:
java --module-path "C:\javafx\lib" --add-modules javafx.controls,javafx.fxml -jar myapp.jar
注意:
• --module-path 必须在 --add-modules 之前;
• -jar 必须放在最后;
• 所有路径用绝对路径最稳妥,避免相对路径引发的定位失败。










