JavaFx图像路径

时间:2015-10-23 14:36:47

标签: java image exception javafx path

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

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.<init>(Image.java:624)
    at view.OptionsWindow.<clinit>(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完成处理

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:5)

Image constructor期望指定 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);

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

如果您传递代表相对网址的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);

这似乎有点违反直觉(至少对我而言),所以我更喜欢完全指定网址,或者根据需要从getClass().getResource()File.toURI().toURL()中检索网址。