JavaFX运行报错:模块Proj未将proj.new包导出至javafx.fxml模块问题问询
报错根因
该报错是Java 9及以上版本引入的JPMS(Java平台模块系统)的访问限制导致的:javafx.fxml模块需要通过反射加载你定义的proj.new.exampleclass控制器类,但你的Proj模块没有开放对应包的访问权限给javafx.fxml。你之前配置的Eclipse构建路径导出是类路径模式下的配置,在模块体系下不生效。
解决步骤
- 第一步:确认项目根目录的
src文件夹下存在module-info.java模块描述文件,如不存在,右键项目 -> 点击Configure-> 选择Create module-info.java生成即可。 - 第二步:编辑
module-info.java,添加包导出/开放配置,示例配置如下:
module Proj { // 引入依赖的JavaFX模块,按需补充其他用到的模块 requires javafx.controls; requires javafx.fxml; requires javafx.graphics; // 导出proj.new包给javafx.fxml模块访问公共类 exports proj.new to javafx.fxml; // 若控制器中存在@FXML注解的非public字段/方法,需额外添加开放配置允许反射访问 opens proj.new to javafx.fxml; // 导出主类所在包,保障程序正常启动 exports proj; }
- 第三步:核对包识别状态,右键
proj.new文件夹 -> 选择Build Path,确认该文件夹被标记为Source Folder,如不是选择Use as Source Folder即可。 - 第四步:清理并重建项目,点击顶部菜单栏
Project-> 选择Clean-> 选中你的Proj项目执行清理,之后重新运行项目即可。
可选替代方案
如果不需要使用JPMS模块特性,可以直接删除module-info.java文件,项目会自动切换为无名类路径模式运行,也可以绕过该访问限制。
内容的提问来源于stack exchange,提问作者MakeTheErrorDie
相关产品推荐
相关产品推荐

