我在eclipse中有一个gradle项目。这是我项目的结构
我在styleclass.css
中有css资源scr/main/resources/css
。首先,我尝试使用
scene.getStylesheets().add("css/styleclass.css");
但是我收到警告resource not found.
我也尝试删除module-info.java
文件。但结果是一样的。
然后我尝试使用
String urlString = ComboBoxStyling.class.getClassLoader().getResource("css/styleclass.css").toExternalForm();
问题是,如果我删除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;
}
谢谢&此致
Basit Mahmood Ahmed
答案 0 :(得分:1)
你应该将你的css放在与使用它的类相同的包中,然后使用Class.getResource来访问它,并使用相对的Path。
src/main/java:
pk.training.basit
ComboBoxStyling.java
src/main/resources:
pk.training.basit
ComboBoxStyling.css
然后在来源:
scene.getStylesheets().add(
ComboBoxStyling.class.getResource("ComboBoxStyling.css").toExternalForm());
我个人认为将css和类放在同一目录中更好的做法,然后配置gradle以便它可以占用src / main目录中的资源。它允许具有类似于其他GUI产品(Angular)的体系结构,其将屏幕的所有资源(包括源)放在同一目录中,例如FXML文件(如果有的话)。
答案 1 :(得分:0)
来自func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
let point = touch.location(in: view)
return !dialogView.frame.contains(point)
}
JavaDoc:
命名模块中的资源受Module.getResourceAsStream指定的封装规则的约束。此外,除了资源的名称以" .class"结尾的特殊情况之外,此方法只会在无条件打开包时找到命名模块包中的资源(即使此调用者的调用者) method与资源在同一模块中。
因此,要解决您的问题,您应该打开包ClassLoader.getResource
:
css