为什么 getResource return 为空

Why does getResource return null

我正在尝试访问我项目中的一个文件。但是 getResource 方法 returns null.

这是我的项目的样子:

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

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

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

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

已解决

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

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

尝试使用 / 前缀。

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

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

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

您使用当前 class 的 class 加载程序是否有原因? this.getClass().getClassLoader().getResource("/xxx.png") 之类的应该更可靠。

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

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

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

这两种方法都行得通。这只是文件路径问题。

  • 您的 Jar 结构显示没有 "asset" 文件夹
    xxx.png 文件直接在 Jar 文件中。

尝试从下面的代码行中删除 "assets"。

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

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