当前位置: 首页 > 知识库问答 >
问题:

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

柳昊焱
2023-03-14

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

Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found
  at javafx.scene.image.Image.validateUrl(Image.java:1110)

我正在使用eclipse,尽管这个问题似乎不是eclipse特定的,因为我在终端运行时收到了相同的异常。此外,由于某种原因,当文件在包内或src文件夹中时,它会工作(给定的路径会适当更改)。

我当前的活动类菜单。java在包测试中。dsp,位于项目中,具体如下:

项目/src/test/dsp/Menu。JAVA

我试图访问的文件:

项目/资产/图形/测试/dsp/sslogo。巴布亚新几内亚

我试图访问该文件的前提是该路径与菜单中当前的菜单类相关。java,由于物理目录为project/src/test/dsp/Menu。java,我正在实现/ 在我的相对路径中三次以访问项目目录。然后我简单地将路径放在下图中。

Image ssLogo = new Image("../../../assets/graphics/test/dsp/sslogo.png",
            2000, 2000, true, true);

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

public Image(java.lang.String url,
     double requestedWidth,
     double requestedHeight,
     boolean preserveRatio,
     boolean smooth)

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

我已经搜索了大量的问题,但他们的答案并不能为我当前的案例提供解决方案。我尝试了getResource、getResourceAsStream和外部资源。我检查了通过这些方法返回的URL,没有一个使用我提供的路径,如上所示。我还尝试了不同数量的/ ,仍然无效。诚然,我可能错误地实施了它们,但没有取得任何成功。

>

  • 为什么这种通过相对路径访问文件的方法不起作用,我如何在当前目录设置下使其起作用?

    在java中,通常通过相对路径访问文件的正确方法是什么?特别是当文件位于包之外时,例如本例?

    • 有没有办法通过java类中的代码将文件包含到文件路径中

    将文件放在包内更有效,还是无关紧要(显然取决于访问包外文件的方式)?

    • 有没有更有效的方法通过java访问文件

  • 共有1个答案

    汪阳辉
    2023-03-14

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

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

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

    更新:

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

    如果在URL的开头不使用http:或file:之类的协议,则将在(默认)包中搜索资源。因此,在您的情况下,获取文件的好方法是使用以下行:

    Image ssLogo = new Image("file:assets/graphics/test/dsp/sslogo.png", 2000, 2000, true, true);
    
     类似资料:
    • 问题内容: 我的Java应用程序有问题,特别是从计算机中的某个位置加载图像时。 在这篇文章之后,我使用和来在计算机上加载图像。首先,我将图片()放入源代码中,并且可以正常工作。但是,如果我将图像放到另一个地方(比如说),Java IDE会向我显示一个 这是代码: 问题答案: &不适用于文件路径,但适用于相对于代码库的路径。如果代码库为,则可以找到资源的相对路径为。 通过加载文件之间..differ

    • 我有一个图像文件夹的相对路径的问题。我想把图片列到一个文件夹中,把它们的网址添加到列表中,并在jsp中显示出来。代码是这样的: 我试过好几条路,但都不走运。非常感谢你。

    • 问题内容: 因此,我正在运行此javascript,并且除背景图片的路径外,其他所有功能都正常运行。它可以在我的本地ASP.NET Dev环境中使用,但是当部署到虚拟目录中的服务器时则无法使用。 这在外部.js文件中,文件夹结构为 然后这就是js文件所在的位置 我已经尝试过使用,但也不起作用;但是,如果使用,它似乎可以在服务器上工作。 基本上,我希望具有与ASP.NET tilda-相同的功能。

    • 我正在用Joomla编写一个组件,希望使用JavaScript。 我在一个separat测试html页面中获得了JavaScript部分,但现在我想将其包含在Joomla组件中。 在脚本中,我需要到图像文件夹的路径。我不想在脚本中硬编码绝对路径。如何获得相对路径?我可以使用Joomla函数吗? 谢谢。

    • 问题内容: 因此,我正在运行此javascript,并且除背景图片的路径外,其他所有功能都正常运行。它可以在我的本地ASP.NET Dev环境中工作,但是在部署到虚拟目录中的服务器时不起作用。 这在外部.js文件中,文件夹结构为 然后这就是js文件所在的位置 我已经尝试过使用,但也不起作用;但是,如果使用,它似乎可以在服务器上工作。 基本上,我希望具有与ASP.NET tilda-相同的功能。 更

    • 问题内容: 这似乎是一个直接的问题。但我无法破解。在helper1.js中,我想访问foobar.json(来自) 我无法使它正常工作fs:如何找到父文件夹? 这里的任何帮助将是巨大的。 问题答案: 您可以使用该模块将所在目录的路径连接到的相对路径。这将为您提供前往的绝对路径。 假设采用UTF8编码,则此方法应可在Linux,OSX和Windows上使用。