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(),但它仍然无效。

试试这个: –

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

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

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

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

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

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

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

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

尝试这个:

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

你可以试试这个:

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

尝试使用以下内容

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

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

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

对此

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

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

资源文件夹是eclipse中的类文件夹吗? 右键单击项目 – >属性 – > Java构建路径 – >库 – >添加类文件夹… – >(选择res文件夹)并将其添加为类文件夹。

尝试这个

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