![](/img/trans.png)
[英]java.lang.IllegalArgumentException: input == null! at javax.imageio.ImageIO.read(Unknown Source)
[英]java.lang.IllegalArgumentException: input == null! when using ImageIO.read to load image as 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
文件夾名稱之前的斜杠/
已被刪除。
我通過更改我的代碼解決了我的問題
image = ImageIO.read(SpriteSheet.class.getResourceAsStream("res/image.png"));
對此
image = ImageIO.read(SpriteSheet.class.getResourceAsStream("/image.png"));
希望這可以幫助。
我知道這已經很老了,但我遇到了同樣的問題。
檢查以確保您的圖片附加信息不是大寫的。
在我的圖像資源文件夾中,我有“enemy.PNG”,但我試圖加載“enemy.png”,您認為它可以工作但沒有。
所以,只要讓你的擴展名不大寫。
作為參數傳遞給 getResourceAsStream() 的路徑應該相對於類路徑集。 所以嘗試改變這個
this.icon = ImageIO.read(this.getClass().getResourceAsStream("/resources/" + imgName));
到
this.icon = ImageIO.read(this.getClass().getResourceAsStream("resources/" + imgName));
這可能是“不,廢話!” 對於本網站上的許多人,但指出 Java 的字面意義始終很重要。 區分大小寫是關鍵,特別是如果你 .jar 文件。
如果您的程序在編譯然后運行時運行良好,但在您 .jar 文件時突然遇到此問題。 確保檢查你的文件夾/文件和代碼中的引用。 (以及確保它們在您的 .jar 中)
希望這可以幫助最終在這里解決相同問題的任何人。
嘗試這個:
this.icon = ImageIO.read(this.getClass().getResource("/resources/" + imgName));
嘗試使用以下
this.icon = ImageIO.read(this.getClass().getResourceAsStream("../resources/" + imgName));
資源文件夾是eclipse中的類文件夾嗎? 右鍵單擊項目-> 屬性-> Java 構建路徑-> 庫-> 添加類文件夾...->(選擇res 文件夾)並將其添加為類文件夾。
由於我的代碼中的錯誤,我正面臨此錯誤。 我試圖從一個不同的連接對象中提取 (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);
}
}
}
你可以試試這個:
image = ImageIO.read(getClass().getResource("/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));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.