【问题标题】:Why does getResource return null为什么getResource返回null
【发布时间】:2015-07-04 20:20:29
【问题描述】:

我正在尝试访问我的项目中的文件。但是 getResource 方法返回 null。

这是我的项目的样子:

Thread.currentThread().getContextClassLoader().getResource("assets/xxx.png"); //returns null

以及 eclipse 工作区中的项目文件夹是什么样子的:

为什么?我想访问资产文件夹中的文件?

编辑 我创建了一个 jar 文件,这是 jar 的内容:

已解决

首先,我有很多图像文件,所以我想将它们全部整理到一个文件夹中。我把 assets 文件夹放在 src 目录下,终于可以访问文件了。

this.getClass().getClassLoader().getResource("assets/xxx.png");

【问题讨论】:

  • 您无法访问 assert 文件夹,除非您已将其捆绑在您的 jar 中。您能否提取一个 jar 并显示其中的内容,以便我们为您提供帮助。
  • 资产文件夹是否定义为源文件夹?
  • @AlexR 是的,定义为源文件夹
  • @Eranda 我做到了。我编辑了我的帖子,你能看一下吗?
  • assets/ 不应在路径中。它是构建路径中的外部(不在 src 中)文件夹,这意味着它的内容被放入根目录,没有目录。见here

标签: java eclipse jar assets getresource


【解决方案1】:

尝试使用/ 前缀。

Thread.currentThread().getContextClassLoader().getResourceAsStream("/xxx.png")

【讨论】:

  • 根据您的jar 结构,我可以在根目录中看到该图像文件。我更新了我的答案再试一次。谢谢
  • 尝试使用 getResourceAsStream,并将您的课程更改为使用 Inputstream 而不是 File
【解决方案2】:

有很多方法可以将资源添加到 jar 文件中,您可以将其放在 src 中,如果您使用 maven、ant 等,则添加为资源...如果您能够捆绑整个目录,那么您应该能够使用您的原始代码。 使用当前结构,您可以使用以下代码。

Thread.currentThread().getContextClassLoader().getResource("/xxx.png"). 

【讨论】:

  • 如果我只是将所有文件添加到我可以访问的 bin 目录中。但是我的项目中有很多文件,我想将它们组织在一个目录中。所以我想把所有文件放在一个文件夹中,然后从这个目录访问它们。
  • 将整个 asserts 目录放在 src (source) 文件夹中。 Eclipse 会为你打包。
  • @Eranda - 您的代码似乎获得了相对路径。它与什么相关,我如何找出根?
【解决方案3】:

您使用当前类的类加载器是否有原因?像this.getClass().getClassLoader().getResource("/xxx.png") 这样的东西应该更可靠。

【讨论】:

    【解决方案4】:

    使用下面的代码,它应该可以工作。

    YOUR_CLASS_HERE.class.getClass().getResource( "/xxx.png" );

    例如 Signin.class.getClass().getResource( "/xxx.png" );

    【讨论】:

      【解决方案5】:

      任何一种方法都可以。它只是文件路径问题。

      • 您的 Jar 结构显示没有“资产”文件夹
        xxx.png 文件直接在 Jar 文件中。

      尝试从下面的代码行中删除“资产”。

      Thread.currentThread().getContextClassLoader().getResource("assets/xxx.png"); //returns null
      
      • 另外,如果您想在您的类路径中使用“assets”文件夹,请确保您的 jar 包含“assets”文件夹。

      【讨论】:

        【解决方案6】:

        对于像我一样挣扎的人。对于 Maven,只需运行 mvn clean install。 之后Thread.currentThread().getContextClassLoader().getResource() 应该可以工作了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-09
          • 2010-10-12
          • 2014-07-14
          • 2021-12-15
          • 2014-12-07
          • 1970-01-01
          相关资源
          最近更新 更多