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)
感谢和问候
巴斯特·马哈茂德·艾哈迈德
来自ClassLoader.getResource
JavaDoc:
命名模块中的资源遵循 Module.getResourceAsStream 指定的封装规则。另外,除了资源名称以“.class”结尾的特殊情况外,当无条件打开包时,此方法只会在命名模块的包中查找资源(即使此方法的调用者位于同一个包中)。模块作为资源)。
因此,要解决您的问题,您应该打开软件包css
:
module pk.training.basit {
exports pk.training.basit;
requires transitive javafx.controls;
opens css;
}
Run Code Online (Sandbox Code Playgroud)