我试图在JavaFX中制作一个简单的菜单。当我试图使用相对路径加载图像时,我会收到以下异常:
Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found
at javafx.scene.image.Image.validateUrl(Image.java:1110)
我正在使用eclipse,尽管这个问题似乎不是eclipse特有的,因为在终端中运行时我收到了相同的异常。此外,由于某种原因,当文件位于包内或src文件夹中(给定路径被适当更改)时,它可以工作。
我当前的活动类Menu.java
位于包test.dsp
中,该包位于项目中,如下所示:
project/src/test/dsp/Menu.java
我试图访问的文件:
项目/资产/图形/测试/dsp/sslogo.png
我试图访问该文件,假设该路径相对于Menu.java
中的当前Menu.java
类,并且由于物理目录是project/src/test/dsp/Menu.java
,我在相对路径中实现了三次../
,以到达项目目录。然后,我简单地将路径放置到图像,如下所示。
Image ssLogo = new Image("../../../assets/graphics/test/dsp/sslogo.png",
2000, 2000, true, true);
public Image(java.lang.String url,
double requestedWidth,
double requestedHeight,
boolean preserveRatio,
boolean smooth)
url -表示要用于获取像素数据的URL的字符串
我已经搜索了大量的问题,但他们的答案并没有提供一个解决方案,使我目前的案例。我尝试过getResource、getResourceAsStream和外部资源。我检查了通过这些方法返回的URL,没有一个与我提供的路径一起工作,如上面所示。我也尝试了不同的../
号码,但还是没有用。无可否认,我可能执行错了,结果没有成功。
- is there a way to include the file into the file path via code in the java class?
- is there a more effective means of file access through java?
发布于 2016-07-23 17:10:22
java中的相对路径从项目的根目录(在您的例子中是" project“目录)开始,而不是从调用url的类开始。因此,您的png文件的相对路径是"assets/graphics/test/dsp/sslogo.png“。
通常,包对相对路径没有影响。
更有效的方法是将图像和其他静态文件保持在不同的目录中,就像您所做的那样。"src“文件夹为.java文件保留。
更新:
正如在那篇文章中所说的:https://stackoverflow.com/a/16122215/6629388
如果您不使用像http:或file这样的协议:在URL开始时,将在(默认)包中搜索资源。因此,在您的示例中,获取文件的好方法是使用以下行:
Image ssLogo = new Image("file:assets/graphics/test/dsp/sslogo.png", 2000, 2000, true, true);
https://stackoverflow.com/questions/38547707
复制相似问题