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

时间:2013-09-27 03:03:27

标签: java css javafx classpath

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

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

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

如何从类路径外部加载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)

1 个答案:

答案 0 :(得分:2)

您可以在/参数的开头添加String,以在类路径的根目录中搜索资源

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();