如何在 Java 9 中使用类加载器访问资源

Bas*_*sit 5 java javafx classloader java-9

我在 Eclipse 中有一个 gradle 项目。这是我的项目的结构

项目结构

我在 .cssstyleclass.css中有 css 资源scr/main/resources/css。首先我尝试使用访问它

scene.getStylesheets().add("css/styleclass.css"); 
Run Code Online (Sandbox Code Playgroud)

但是我收到警告resource not found.我也通过删除module-info.java文件来尝试它。但结果是一样的。

然后我尝试使用

String urlString = ComboBoxStyling.class.getClassLoader().getResource("css/styleclass.css").toExternalForm();
Run Code Online (Sandbox Code Playgroud)

问题是,如果我删除moduele-info.java并应用样式表,这条线会起作用。但是随着module-info.java我收到空指针异常。

我知道的不多,但至少我知道类加载器在 Java 9 中有变化。那么我如何在 Java 9 中做同样的事情。我的module-info.java文件包含以下内容

module pk.training.basit {
    exports pk.training.basit;
    requires transitive javafx.controls;
}
Run Code Online (Sandbox Code Playgroud)

感谢和问候

巴斯特·马哈茂德·艾哈迈德

Zhe*_*lov 3

来自ClassLoader.getResourceJavaDoc:

命名模块中的资源遵循 Module.getResourceAsStream 指定的封装规则。另外,除了资源名称以“.class”结尾的特殊情况外,当无条件打开包时,此方法只会在命名模块的包中查找资源(即使此方法的调用者位于同一个包中)。模块作为资源)。

因此,要解决您的问题,您应该打开软件包css

module pk.training.basit {
    exports pk.training.basit;
    requires transitive javafx.controls;
    opens css;
}
Run Code Online (Sandbox Code Playgroud)