首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过相对路径作为图像加载包外部的Java文件(JavaFX)

通过相对路径作为图像加载包外部的Java文件(JavaFX)
EN

Stack Overflow用户
提问于 2016-07-24 00:47:37
回答 1查看 6.6K关注 0票数 2

我试图在JavaFX中制作一个简单的菜单。当我试图使用相对路径加载图像时,我会收到以下异常:

代码语言:javascript
代码运行次数:0
运行
复制
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,我在相对路径中实现了三次../,以到达项目目录。然后,我简单地将路径放置到图像,如下所示。

代码语言:javascript
代码运行次数:0
运行
复制
Image ssLogo = new Image("../../../assets/graphics/test/dsp/sslogo.png",
            2000, 2000, true, true);

我的知识来源于JavaFX API中描述的构造函数:

代码语言:javascript
代码运行次数:0
运行
复制
public Image(java.lang.String url,
     double requestedWidth,
     double requestedHeight,
     boolean preserveRatio,
     boolean smooth)

url -表示要用于获取像素数据的URL的字符串

我已经搜索了大量的问题,但他们的答案并没有提供一个解决方案,使我目前的案例。我尝试过getResource、getResourceAsStream和外部资源。我检查了通过这些方法返回的URL,没有一个与我提供的路径一起工作,如上面所示。我也尝试了不同的../号码,但还是没有用。无可否认,我可能执行错了,结果没有成功。

  • 为什么这种通过相对路径访问文件的方法不起作用,以及如何在设置当前目录的情况下使其工作?
  • 一般情况下,通过java中的相对路径访问文件的正确方法是什么?特别是当文件在包之外时,例如这种情况?
代码语言:javascript
代码运行次数:0
运行
复制
- is there a way to include the file into the file path via code in the java class?

  • 在包中保存文件更有效,还是不重要(显然取决于访问包外文件的方式)?
代码语言:javascript
代码运行次数:0
运行
复制
- is there a more effective means of file access through java?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-24 01:10:22

java中的相对路径从项目的根目录(在您的例子中是" project“目录)开始,而不是从调用url的类开始。因此,您的png文件的相对路径是"assets/graphics/test/dsp/sslogo.png“。

通常,包对相对路径没有影响。

更有效的方法是将图像和其他静态文件保持在不同的目录中,就像您所做的那样。"src“文件夹为.java文件保留。

更新:

正如在那篇文章中所说的:https://stackoverflow.com/a/16122215/6629388

如果您不使用像http:或file这样的协议:在URL开始时,将在(默认)包中搜索资源。因此,在您的示例中,获取文件的好方法是使用以下行:

代码语言:javascript
代码运行次数:0
运行
复制
Image ssLogo = new Image("file:assets/graphics/test/dsp/sslogo.png", 2000, 2000, true, true);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38547707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档