JavaFx图像路径

我的Java类有问题。 实际上代码是正确的,但如果我单击运行按钮,则会导致图像路径exception。

static Image currentBackground = new Image("Snake/Images/background_options.png", true); 

编译器的消息是:

 Exception in thread "main" java.lang.ExceptionInInitializerError at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:122) Caused by: java.lang.IllegalArgumentException: Invalid URL: Invalid URL or resource not found at javafx.scene.image.Image.validateUrl(Image.java:1100) at javafx.scene.image.Image.(Image.java:624) at view.OptionsWindow.(OptionsWindow.java:21) ... 3 more Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found at javafx.scene.image.Image.validateUrl(Image.java:1092) ... 5 more 

进程以退出代码1结束

有谁能够帮助我?

Image构造函数需要指定URL ,而不是文件系统路径。 假设您将此映像作为应用程序的一部分进行捆绑,则需要在加载类的同一位置加载该映像:可能是最终部署中的jar文件,但可能是在开发期间从文件系统中。

获取表示作为应用程序一部分的资源的URL的机制是在ClassClassLoader上调用getResource()

确切的方法取决于您未显示的项目结构,但例如:

 new Image(getClass().getResource("Snake/Images/background_options.png").toString(), true); 

将从相对于当前类指定的资源加载图像,以及

 new Image(getClass().getClassLoader().getResource("Snake/Images/background_options.png").toString(), true); 

将从相对于类路径指定的资源加载图像。

如果您传递表示相对URL的String (即没有方案的String ,例如file:http:jar: ,则Image构造函数将在类路径上搜索资源。 换一种说法

 new Image("Snake/Images/background_options.png", true); 

相当于

 new Image(getClass().getClassLoader().getResource("Snake/Images/background_options.png").toString(), true); 

这似乎有点反直觉(至少对我来说),所以我更喜欢总是完全指定一个URL,或者从getClass().getResource()File.toURI().toURL()检索一个URL。