15

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

4

11 回答 11

13

尝试使用这个: -

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

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

于 2013-03-15T04:47:34.740 回答
2

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

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

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

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

于 2021-05-10T15:01:43.553 回答
2

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

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

对此

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

希望这可以帮助。

于 2018-03-17T01:37:11.320 回答
1

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

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

this.icon = ImageIO.read(this.getClass().getResourceAsStream("resources/" + imgName));
于 2013-03-15T04:52:00.153 回答
1

这可能是“不,Duh!” 对这个网站上的许多人来说,但指出 Java 的字面意义总是很重要的。区分大小写是关键,尤其是当您 .jar 文件时。

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

希望这可以帮助任何最终在这里看到相同问题的人。

于 2018-09-04T04:18:20.923 回答
0

尝试使用以下

this.icon = ImageIO.read(this.getClass().getResourceAsStream("../resources/" + imgName));
于 2013-03-15T06:16:06.483 回答
0

尝试这个:

this.icon = ImageIO.read(this.getClass().getResource("/resources/" + imgName));
于 2013-03-15T04:38:46.993 回答
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);
     }
   }
 }
于 2020-07-20T16:59:58.633 回答
0

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

于 2018-05-26T03:16:34.093 回答
-1

你可以试试这个:

image = ImageIO.read(getClass().getResource("/resources/" + imgName));
于 2013-03-15T05:00:10.080 回答
-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));      
}
于 2013-09-20T18:25:59.430 回答