Vik*_*ria 0 java javafx image exception path
我的Java类有问题.实际上代码是正确的,但如果我单击运行按钮,则会导致图像路径异常.
static Image currentBackground = new Image("Snake/Images/background_options.png", true);
Run Code Online (Sandbox Code Playgroud)
编译器的消息是:
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
Run Code Online (Sandbox Code Playgroud)
进程以退出代码1结束
有谁能够帮我?
该Image
构造被期待的规范网址,而不是一个文件系统路径.假设您将此映像捆绑为应用程序的一部分,则需要在加载类的同一位置加载它:可能是最终部署中的jar文件,但可能是在开发期间从文件系统中.
该机制得到代表的资源是应用程序的一部分是调用URL getResource()
上Class
或ClassLoader
.
确切的方法取决于您未显示的项目结构,但例如:
new Image(getClass().getResource("Snake/Images/background_options.png").toString(), true);
Run Code Online (Sandbox Code Playgroud)
将从相对于当前类指定的资源加载图像,以及
new Image(getClass().getClassLoader().getResource("Snake/Images/background_options.png").toString(), true);
Run Code Online (Sandbox Code Playgroud)
将从相对于类路径指定的资源加载图像.
在事件中,你传递一个String
代表相对URL(即一个没有方案,如file:
,http:
或jar:
),那么Image
构造函数将搜索资源类路径上.换一种说法
new Image("Snake/Images/background_options.png", true);
Run Code Online (Sandbox Code Playgroud)
相当于
new Image(getClass().getClassLoader().getResource("Snake/Images/background_options.png").toString(), true);
Run Code Online (Sandbox Code Playgroud)
这似乎有点反直觉(至少对我而言),所以我更喜欢总是完全指定一个URL,或者从适当的地方getClass().getResource()
或从File.toURI().toURL()
适当的位置检索一个URL .
归档时间: |
|
查看次数: |
11245 次 |
最近记录: |