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