【问题标题】:Define a relative path of image in Java FX在 Java FX 中定义图像的相对路径
【发布时间】:2015-02-11 07:47:24
【问题描述】:

我知道这个问题已经被问过很多次了,我已经广泛搜索了这个可能很简单的问题的解决方案。我正在尝试遵循 Oracle 网站上的简单 javaFX 组件教程。我可以这样定义图像:

Image img = new Image("images/portal.png", 50, 50, true, true);

这在图像位于“src”文件夹内的文件夹中时有效,但是当我在“src”文件夹之外有图像文件夹时,我试图让它找到图像,如下所示:

project_root/
 |---src/
      |---Main.java
 |---images/
      |---portal.png    

我怎样才能做到这一点?我得到的只是错误提示“无效的 URL 或找不到资源”。我尝试使用绝对路径,尝试将“..”放在前面,尝试“HS-Graph/images/portal.png”以及介于两者之间的所有内容:(谢谢!

【问题讨论】:

  • 构造一个 URL。用 url.toString() 保存它。然后使用新的图像(字符串)。
  • 我不确定你的意思,为什么会有任何不同?它仍然会产生一个与我的情况相同的字符串。
  • 使用文件 file = new File("portal.png"); if (file.exists()) String tdir = afile.getAbsolutePath();或者你可以使用 file.toURI() 或者你需要的任何东西。这有帮助吗?
  • 好吧,它不起作用:(。file.exists() 是假的。它找不到我的文件。肯定有一种简单的方法可以设置 src 文件夹之外的相对路径!我的意思是,它运行良好!感谢您的帮助...
  • 找不到文件是您的任务。阅读 java.io.File 上的 JavaDoc。您只在当前目录中查找。您需要遍历文件系统以找到根目录或与您的环境相关的任何内容。您可以在此处或 google 搜索文件遍历等,以了解如何执行此操作。如果该文件在您的文件系统中,那么您可以找到它。

标签: java image path javafx


【解决方案1】:

让我试着这样说; 如果要使用在不同目录中找到的图像,最好指定其相对路径。例如,如果我在 ImageFile 上寻找门户图像。我会这样做:

Image img = new Image("file:images/portal.png");

【讨论】:

  • 不应使用绝对路径。如果他想分发程序怎么办?用户可能不会将其存储在C 驱动器上,并且绝对不会拥有相同的机器用户名。最好通过System.getProperty("user.home") 访问用户文件夹,但即便如此,程序也必须在那里存储所有资源(这并不罕见,但并不总是首选限制)
  • 我已经尝试过这个建议 ' Image img = new Image("file:images/portal.png"); ' 但它对我不起作用,这就是我为什么使用它
  • 他的图像在他的项目文件夹中,而您的示例显示图像在桌面上(而不是在项目文件夹中)。将您的图像放入项目中(在名为images 的文件夹下),然后重试。他的问题是关于图像不在ProjectName/src 中,但他仍然在ProjectName/images 中。
  • 它需要在ProjectName/images。他file: 部分告诉程序路径指的是项目中的一个文件。然后他用images/... 跟在后面,告诉我们它在图像文件夹中。问题是关于在src 文件夹(源文件夹)中加载不是 的图像。如果您有 25 个代表,我可以邀请您聊天以进一步解释。编辑一些帖子(每次获得批准时 +2 代表),修正这个答案,以便证明投票是合理的(不要使用绝对路径)。
【解决方案2】:

我将回答我自己的问题,因为我确实找到了解决方案!我的解决方案是在指定路径时使用“file:”前缀。所以:

Image img = new Image("file:images/portal.png");

当图像文件位于我的 src 文件夹之外时,可以完美运行!

【讨论】:

  • 这个例子不起作用。我正在添加前缀文件:不工作。
  • 您使用的是 Windows 吗?我刚刚又试了一次,效果很好。您是否将图像文件夹放在项目文件夹之外?
  • 好的,我试试谢谢回复
  • 很奇怪。我这样做了,现在我在控制台中遇到了一个疯狂的错误,它一直在闪烁。我什至无法复制它,因为它在闪烁。
  • 如果你在 .fxml 而不是 url="@../../../../resources/iconfinder_heartbeat_1930261.png" url="file:resources/iconfinder_heartbeat_1930261.png" 上使用它也可以工作
【解决方案3】:

我认为您遇到了问题,因为 Images 文件夹超出了您的项目范围。您可以考虑更改项目的结构。

例如:

->src
|-->main
    |--->java
          |-->(default package)
    |--->resources
          |-->images

那么你应该可以通过路径 ./src/main/resources/images/portal.png 访问你的图片

【讨论】:

  • 嗯,它不在我的项目之外,它就在项目文件夹(HS-Graph)下。我知道我已经使用 Slick 编写了一个游戏,我把图像文件夹放在这里,它工作了:/
  • 但该文件夹不是类路径的一部分,因此在运行时找不到它
  • 所以你的意思是没有办法像我想要的那样做?我必须把我的图像、音频、视频和什么不在我的 src 文件夹中?
猜你喜欢
  • 2012-12-21
  • 1970-01-01
  • 2013-07-25
  • 2018-01-27
  • 2013-12-18
  • 2011-07-06
  • 2011-08-25
  • 2018-11-05
相关资源
最近更新 更多