问题 java.lang.IllegalArgumentException:input == null!使用ImageIO.read将图像加载为bufferedImage时


这是一个在这个网站上被问过100次的问题,但是我已经查看了所有这些问题,即使它们都已经解决了,但没有一个解决方案适合我。

这是我的代码的样子:

public Button1(Client client, String imgName) {
    this.client = client;   

    try {
        this.icon = ImageIO.read(this.getClass().getResourceAsStream("/resources/" + imgName));
    } catch (IOException e) {
        e.printStackTrace();
    }

代码运行时会导致以下错误:

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

字符串imgName从子类传递给构造函数,并且是图像的名称(例如image.png)。我还确保我的资源文件夹位于项目文件夹的根目录中,并作为eclipse项目中的源文件夹包含在内。我也确定了 System.getProperty("user.dir") 指向正确的位置。我也尝试使用getResource()而不是getResourceAsStream(),但它仍然无效。


12910
2018-03-15 04:36


起源

通常情况下,如果 resources 文件夹实际上是在Eclipse中标记为源文件夹,你不应该包括 /resources 上面的文件位置中的部分。相反, resources 文件夹将是“根”,你应该能够做到 "/" + imgName。 - Peter Mularien
把我的个人经历放在那里。我正在调查一个小时的类似问题,当时我注意到我的<file> .jpg资源以大写字母开头,而我已经定义了<file> .jpg的路径,从小写开始。所以船长明显警觉,但仍然 - 提防文件名:)祝你好运。 - Alex
这个答案 当我得到同样的错误时是解决方案。 - Gary


答案:


试试这个: -

this.icon = ImageIO.read(new FileInputStream("res/test.txt"));

哪里 res 文件夹与您的文件夹位于同一级别 src 夹。另外,如果你注意到,斜线 / 之前 res 文件夹名称已删除。


11
2018-03-15 04:47



刚试过这个 - 它没有抛出错误,但图像没有出现。 - tyler
检查您的图像文件是否为空。 - SudoRahul
非常感谢,避免了很多挫折......狭隘...... - Andy
为我工作!!谢谢!! - Mrinmoy
Thnaks ......为我工作!! - RCP


作为getResourceAsStream()参数传递的路径应该相对于类路径集。 所以试着改变它

this.icon = ImageIO.read(this.getClass().getResourceAsStream("/resources/" + imgName));

this.icon = ImageIO.read(this.getClass().getResourceAsStream("resources/" + imgName));

1
2018-03-15 04:52



有这个问题的所有其他线程都说斜线应该在那里,但无论如何都不适合我。 - tyler
尝试检查imgName是否为null。 - Kishore
我已经用print语句检查了所有的null。什么都没有回来作为null或任何意想不到的除了 this.getClass().getResourceAsStream("/resources/" + imgName) 声明。 - tyler
检查项目的类路径。它应该有resources文件夹。如果没有将它添加到类路径并使用相对路径。 - Kishore
资源文件夹一直在我的类路径中。这真是令人沮丧...... - tyler


这可能是“不,呃!”对于这个网站上的许多人来说,但指出Java是多么的重要性总是很重要的。区分大小写是关键,特别是如果你.jar文件。

如果你的程序在编译和运行时工作正常,但是当你.jar你的文件突然出现这个问题。务必检查您的文件夹/文件中的Case以及代码中的引用。 (以及确保它们在你的.jar中)

希望这有助于最终在这里看到同一问题的任何人。


1
2017-09-04 04:18





尝试这个:

this.icon = ImageIO.read(this.getClass().getResource("/resources/" + imgName));

0
2018-03-15 04:38



我想我忘了提到我也试过了,但仍然无效。 - tyler


你可以试试这个:

image = ImageIO.read(getClass().getResource("/resources/" + imgName));

0
2018-03-15 05:00



这不回答这个问题。再读一遍 - OP尝试过没有运气。 - andr


尝试使用以下内容

this.icon = ImageIO.read(this.getClass().getResourceAsStream("../resources/" + imgName));

0
2018-03-15 06:16





我有同样的问题。我最初使用路径“my_image.png”但它没有用,所以我到处搜索并尝试了在这个网站上发布的其他解决方案,但没有一个有效。我通过改变我的代码解决了我的问题

 image = ImageIO.read(SpriteSheet.class.getResourceAsStream("res/image.png"));

对此

 image = ImageIO.read(SpriteSheet.class.getResourceAsStream("/image.png"));

我希望这有帮助,即使这个问题是在5年前发布的。


0
2018-03-17 01:37