JavaFX项目重构包结构后module-info.java出现包未找到错误
问题解决:JavaFX模块描述符错误(Package com.example.trademarket not found)
问题根源
你当前的module-info.java中声明了opens com.example.trademarket to javafx.fxml;,但整理包结构后,com.example.trademarket这个根包下已经没有任何类文件了。Java模块系统要求,所有在module-info里用opens或exports声明的包,必须实际存在于模块中(即包下有类/资源文件),否则就会抛出InvalidModuleDescriptorException。
解决方案
- 删除无效的包声明:直接去掉
opens com.example.trademarket to javafx.fxml;这一行,因为该根包已不存在。 - 按需配置子包的opens/exports:根据你的目标包结构(包含
application、controller、classes子包),取消对应子包的配置注释,并确保配置符合实际需求:controller包:FXML控制器类需要被反射访问,必须opens给javafx.fxmlapplication包:如果有主应用类或FXML相关类,同样需要opens给javafx.fxmlclasses包:如果是实体类/工具类,若需要被模块外部访问则用exports,若需要FXML反射则用opens
修正后的module-info.java示例
module com.example.trademarket { requires javafx.controls; requires javafx.fxml; requires org.controlsfx.controls; requires org.kordamp.bootstrapfx.core; requires java.sql; requires org.apache.commons.codec; // 根据实际需求取消注释并调整 opens com.example.trademarket.application to javafx.fxml; opens com.example.trademarket.controller to javafx.fxml; // 如果classes包需要被外部访问或反射,添加对应配置 // opens com.example.trademarket.classes to javafx.fxml; // exports com.example.trademarket.classes; }
额外检查
确认每个opens/exports的包下确实存在类文件,避免再次出现“包不存在”的错误。
内容的提问来源于stack exchange,提问作者wizard
相关产品推荐
相关产品推荐

