java - 从类路径外的目录加载资源时出现 NPE

标签 java css javafx classpath

我正在使用 JavaFX 并尝试将 CSS 文件加载到我的场景中。

scene.getStyleSheets().add(Main.class.getResource("res/application.css").toExternalForm();

抛出 NPE。我在想这是因为 css 文件不在类路径中,但我不确定如何以这种方式加载它。我不想将 css 文件包含在我的包目录 (com.somecompany.package) 中,我更愿意将它包含在一个单独的目录中,该目录可以自行部署(以便用户可以根据需要进行修改)。

如何从类路径外部加载 css 文件(或相关资源)?

我的堆栈跟踪:

java.lang.NullPointerException
        at com.somecompany.someapp.Main.start(Main.java:30)
        at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319)
        at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:206)
        at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:173)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
        at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73)
    at java.lang.Thread.run(Unknown Source)

最佳答案

可以在String参数的开头加上/来搜索classpath根目录下的资源

scene.getStyleSheets().add(Main.class.getResource("/res/application.css").toExternalForm();

否则路径是相对于 Main 所在的包解析的。解析资源的规则是 explained in the javadoc .

如果您想实际修改文件,这并不理想。在这种情况下,您应该从文件系统中获取文件。

Path path = Paths.get("/path/to/file");     
scene.getStyleSheets().add(path.toUri().toURL()).toExternalForm();

关于java - 从类路径外的目录加载资源时出现 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19042036/

相关文章:

python - 更改字体样式,同时保留用于绘图仪表板的外部样式表

JavaFX - BorderPane,确保右 Pane 始终获得最小宽度

java - 如何在java中删除列表中的元素数组?

java - 如何判断当前 tx (Hibernate) 中是否删除了 Grails/GORM 域实例?

css - 如何将 sass 代码编译成另一个目录中的 css 文件?

javafx - java文件中的setText如何更新fxml文件中的文本字段?

JavaFX:如何同时移动 2 个矩形?

java - 配置 Jedis 超时

Swing 应用程序中的 JavaFX 2.2 JFXPanel 显示 Swing 模态对话框

css - 为 Chrome 开发扩展时在样式表中引用静态图像或字体