ImageIO.read 获取资源错误

ImageIO.read getResource error

我遇到了一个奇怪的问题。这是我的代码片段:

...
public xProgressBar(xTheme theme) {
    try {
      this.update = ImageIO.read(xTheme.class.getResource("/images/" + xThemeSettings.PROGRESSBAR_IMAGES[0]));
    }
...

当我 运行 一个程序时,我收到以下错误:

Exception in thread "main" java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(Unknown Source)

这是一个文件结构:

如您所见,res 文件夹与 src 文件夹位于根目录下。我已经阅读了很多类似的问题,但没有任何帮助。

为了 getResource 找到文件,相应的文件夹(在本例中为 res)需要位于 classpath 中。如果它不在类路径中,getResource 返回的 InputStream 将始终是 null.

Here's 如何将文件夹添加到 classpath.

您的调用 .getResource("/images/...") 没有成功并返回 null。因此你打电话给 ImageIO.read(null) 并得到一个 IllegalArgumentException.

您的资源位于 res 文件夹中 通过 ...getResource(...),您需要将 res 设为 Eclipse 项目的源文件夹。 为此:在弹出菜单 select 中右键单击您的 res 文件夹 Build path -> Use as Source Folder.

到时候你会注意到

  • res 将显示与您的 src 文件夹相同的图标。
  • res 将添加到项目的 .classpath 文件中。