繁体   English   中英

从类路径之外的目录加载资源时,NPE

[英]NPE when loading resource from directory outside of classpath

我正在使用JavaFX,并尝试将CS​​S文件加载到场景中。

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参数的开头添加/ ,以在类路径的根目录中搜索资源

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

否则,将相对于Main所在的包来解析路径。javadoc解释了解析资源的规则。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM