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的机制是在Class
或ClassLoader
上调用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。