javaFx 模块系统 Caused by: java.lang.IllegalAccessException: module javafx.base cannot access class com.

javaFx 下的模块系统

Java 9 fx引入的模块化系统中的一个文件,java8版本还没,开始不知道的容易被坑。模块系统用于定义和配置模块。模块化系统的目的是将代码分解为更小的单元(模块),以便更好地组织、管理和重用代码。module-info.java文件包含了模块的元数据信息,以及模块对其他模块的依赖关系。

简而言之,就是代码分解为小的模块,并管理模块间相互访问的权限。

module-info.java文件可以包含以下内容:

模块的名称:使用module关键字定义模块的名称,如model 模块名{……}

模块的依赖关系:使用requires关键字定义模块对其他模块的依赖关系。

模块的导出包:使用exports关键字定义模块中需要对外部模块公开的包。

模块的开放包:使用opens关键字定义模块中需要对外部模块开放的包(用于反射)。

模块的使用服务:使用uses关键字定义模块使用的服务接口。

模块的提供服务:使用provides关键字定义模块提供的服务接口。

下面是一个简单的module-info.java文件的示例:

module com.example.jfxtest01 {
    requires javafx.controls;
    requires javafx.fxml;
    
    exports com.example.Data;
    opens com.example.jfxtest01 to javafx.fxml;
    exports com.example.jfxtest01;
}

requires javafx.controls;

requires javafx.fxml;

表示该模块依赖于JavaFX的controls模块、fxml模块。javafx项目必有这两个

exports com.example.Data;        //这是我当前模块下的一个自己建的包

这一行表示模块将com.example.Data包公开给其他所有模块。

比如我希望我的com.example.Data下的代码能让其他部分的模块代码能访问到我就加上这个。

如果不加就会报:

java.lang.RuntimeException: java.lang.IllegalAccessException: module javafx.base cannot access class com.example.Data.TabData

Caused by: java.lang.IllegalAccessException: module javafx.base cannot access class com.example.Data.TabData

opens com.example.jfxtest01 to javafx.fxml;  //com.example.jfxtest01包公开给javafx.fxml模块。

exports com.example.jfxtest01;        //表示模块将整个com.example.jfxtest01模块公开给其他所有模块。

javafx项目必有这