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

时间:2013-03-15 04:36:36

标签: java bufferedimage javax.imageio

这是一个在这个网站上被问过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(),但它仍然不起作用。

11 个答案:

答案 0 :(得分:12)

尝试使用: -

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

其中res文件夹与src文件夹位于同一级别。另外,如果您注意到,/文件夹名称前的斜杠res已被删除。

答案 1 :(得分:2)

我知道这已经很老了,但我遇到了同样的问题。

检查以确保您的附加图片不是大写。

在我的图像资源文件夹中,我有“enemy.PNG”,但我试图加载“enemy.png”,您认为它可以工作但没有。

所以,让你的扩展名不要大写。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

我遇到了完全相同的问题。我使用了路径" my_image.png"起初但它不起作用,所以我到处搜索并尝试在这个网站上发布的其他解决方案,但没有一个工作。我通过改变我的代码来解决我的问题

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

到这个

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

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

答案 4 :(得分:1)

这可能是“不,啊!”对本网站上的许多人来说,但指出Java的字面意义总是很重要的。区分大小写是关键,特别是如果您.jar一个文件。

如果您的程序可以正常编译,然后运行,但在.jar文件时突然出现此问题。确保检查您的文件夹/文件的大小写以及代码中的引用。 (以及确保它们位于您的.jar中)

希望这可以帮助到此为止发现同一问题的任何人。

答案 5 :(得分:0)

试试这个:

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

答案 6 :(得分:0)

你可以试试这个:

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

答案 7 :(得分:0)

尝试使用以下

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

答案 8 :(得分:0)

资源文件夹是eclipse中的类文件夹吗?右键单击项目 - >属性 - > Java构建路径 - >图书馆 - >添加班级文件夹... - > (选择res文件夹)并将其添加为类文件夹。

答案 9 :(得分:0)

由于代码中的错误,我遇到了此错误。我正在尝试从与其应有的连接对象中提取(conn.getInputStream())。我修复了连接对象变量,它开始起作用。

BufferedImage image;
 try (InputStream in = new BufferedInputStream(conn.getInputStream())) {
   image = ImageIO.read(in);
   File file = new File(fullImageFilePath);
   synchronized (file.getCanonicalPath().intern()) {
     if (!file.exists()) {
         ImageIO.write(image, "png", file);
     }
   }
 }

答案 10 :(得分:-3)

试试这个

private BufferedImage get(String path) throws IOException{    
    URL url = this.getClass().getClassLoader().getResource(path);     
    String thing = url.getFile();       
    return ImageIO.read(new File(thing));      
}