2013-03-15 39 views
8

這是一個問題,這個網站已被問了100次,但我已經看過所有這些,即使他們都解決了,沒有解決方案爲我工作。java.lang.IllegalArgumentException:input == null!當使用ImageIO.read加載圖像作爲緩衝圖像

這裏是我的代碼如下所示:

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(),但它仍然不起作用。

+3

通常情況下,如果'resources'文件夾實際上在Eclipse中標記爲源文件夾,則不應在上面的文件位置中包含'/ resources'部分。相反,'resources'文件夾將是「根」,你應該只能做'「/」+ imgName'。 – 2013-09-20 18:48:07

+0

只是把我的個人經驗。我正在調查一個小時的類似問題,當時我注意到我的 .jpg資源以大寫字母開頭,而我已經定義了從小寫開始的路徑 .jpg。所以船長明顯警覺,但仍然 - 提防文件名:)祝你好運。 – Alex 2016-04-07 01:47:32

+0

[這個答案](http://stackoverflow.com/a/17753326/731314)是當我得到這個相同的錯誤的解決方案。 – Gary 2016-06-10 23:55:14

回答

0

試試這個:

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

我想我忘了提及,我也嘗試過,仍然無法正常工作。 – tyler 2013-03-15 04:41:42

10

嘗試使用這樣的: -

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

其中res文件夾存在於同一級別的src文件夾。另外,如果您注意到,刪除res文件夾名稱前的斜槓/

+0

剛剛嘗試過 - 它沒有拋出錯誤,但圖像沒有出現。 – tyler 2013-03-15 04:59:35

+0

檢查你的圖像文件是否爲空。 – SudoRahul 2013-03-15 05:03:02

+1

非常感謝,避免了很多挫折...狹隘... – Andy 2014-09-04 22:52:04

1

作爲參數傳遞給getResourceAsStream()的路徑應該相對於類路徑集。 因此,嘗試改變這種

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

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

所有其他線程都有這個問題,說實際上斜線應該在那裏,但對我來說都不適用。 – tyler 2013-03-15 04:58:35

+0

嘗試檢查imgName爲null。 – Kishore 2013-03-15 05:02:16

+0

我已經用打印語句檢查了所有null。除了'this.getClass()。getResourceAsStream(「/ resources /」+ imgName)'語句之外,沒有什麼會返回爲null或任何意外事件。 – tyler 2013-03-15 05:04:18

0

你可以試試這個:

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

這並沒有回答這個問題。再次閱讀 - OP已經嘗試過,沒有運氣。 – andr 2013-03-15 05:21:12

0

嘗試使用以下

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

試試這個

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

請更正問題的代碼,而不是沒有上下文或解釋複製/粘貼不相關的代碼... – Kartoch 2013-09-20 18:55:39