簡體   English   中英

java.lang.IllegalArgumentException: 輸入 == null! 當使用 ImageIO.read 將圖像加載為 bufferedImage 時

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM