Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.IllegalArgumentException:input==null!使用ImageIO.read将图像加载为BuffereImage时_Java_Bufferedimage_Javax.imageio - Fatal编程技术网

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

java.lang.IllegalArgumentException:input==null!使用ImageIO.read将图像加载为BuffereImage时,java,bufferedimage,javax.imageio,Java,Bufferedimage,Javax.imageio,这个问题在这个网站上已经被问了100次了,但是我已经看了所有的问题,即使它们都被解决了,没有一个解决方案对我有效 我的代码是这样的: public Button1(Client client, String imgName) { this.client = client; try { this.icon = ImageIO.read(this.getClass().getResourceAsStream("/resources/" + imgName));

这个问题在这个网站上已经被问了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。我还确保我的resources文件夹位于项目文件夹的根目录中,并且作为源文件夹包含在eclipse项目中。我还确保System.getPropertyuser.dir指向正确的位置。我也尝试过使用getResource而不是getResourceAsStream,但仍然不起作用。

试试这个:

this.icon = ImageIO.read(this.getClass().getResource("/resources/" + imgName));
尝试使用以下方法:-

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

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

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

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

您可以尝试以下方法:

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

尝试使用以下命令

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

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

我通过改变代码解决了我的问题

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

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

希望这有帮助。

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

这可能是一个“否”,Duh!对于这个站点上的许多人来说,指出Java的字面意义总是很重要的。区分大小写是关键,尤其是在.jar文件中

如果您的程序在编译和运行时运行良好,但在您.jar文件时突然出现了这个问题。确保检查文件夹/文件的大小写以及代码中的引用。还要确保它们在你的.jar中


希望这能帮助那些最终在这里看到相同问题的人。

由于代码中的错误,我遇到了这个错误。我试图从不同的连接对象中提取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);
     }
   }
 }

我知道这很古老,但我也有同样的问题

检查以确保您的图像扩展不是大写的

在我的图片资源文件夹中,我有敌我的.PNG,但我试图加载敌我的.PNG,你可能会认为它可以工作,但没有


因此,只需使扩展名不大写。

我想我忘了提到我也尝试过,但仍然不起作用。所有其他有此问题的线程都说斜杠实际上应该在那里,但这两种方法都不适用于我。请尝试检查imgName是否为null。我已经用print语句检查了所有内容是否为null。除了this.getClass.getResourceAsStream/resources/+imgName语句之外,没有任何内容返回为null或意外。请检查项目的类路径。它应该具有resources文件夹。如果没有,请将其添加到类路径中,并使用相对路径。资源文件夹始终在我的类路径中。这真是令人沮丧…只是尝试了一下-它没有抛出错误,但是图像没有出现。请检查图像文件是否为空。@Joza100-我建议您阅读javadocs,它会让您更好地了解正在发生的事情以及为什么会发生这种情况。@SudoRahul有趣的是,使用Class.getClass.getResource以前对我有效,但最近我尝试了其他方法,同样的事情不起作用,我不得不换成这个。这就是我为什么要问的原因。似乎有什么改变了。这并不能回答问题。请再次阅读-OP尝试了它,但没有成功。通常,如果resources文件夹在Eclipse中实际标记为源文件夹,则不应在上面的文件位置中包含/resources部分。相反,resources文件夹将是根目录,您应该能够执行/+imgName。只是将我的个人经验放在那里。我花了一个小时研究一个类似的问题,这时我注意到参考资料中的.jpg以大写字母开头,而我已经定义了指向.jpg的路径,以小写字母开头。船长显然很警惕,但还是要小心文件名:祝你好运。如果图像位于同一文件夹ImageIO.readBackground.class.getResourceAsStreamicon1.jpg中,请更正问题的代码,不要在没有上下文或解释的情况下复制/粘贴不相关的代码;如果图像与类位于同一文件夹中@约翰耶酥
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);
     }
   }
 }