2013-04-14 81 views
0

我試圖定義一個URI,像這樣的時候一個int和字符串使用int和字符串:如何添加圖像時到JLabel

Line 38 Icon iconpic = new ImageIcon(getClass().getResource("img/CM"+a+".png")); 
Line 39 JLabel pic = new JLabel(iconpic); 

其中「a」是一個int。

但是我得到這個:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at javax.swing.ImageIcon.<init>(ImageIcon.java:205) 
    at thebutton.CM.<init>(CM.java:38) 

我也試過這樣:

String c = Integer.toString(a); 
    String d = "img/CM"; 
    String e = ".png"; 
    String g = d+a+e; 
    System.out.println(g); 
    System.out.println(getClass().getResource(g)); 
    Icon iconpic = new ImageIcon(getClass().getResource(g)); 
    JLabel pic = new JLabel(iconpic); 

,並得到這個

img/CM0.png 
null 
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 

第2行是從.println 輸出這是NetBeans項目的圖片:

enter image description here

有沒有辦法解決這個問題?

+0

你在你的項目目錄有文件夾'img'? –

+0

從IDE或JAR運行此代碼時是否收到此異常? – Pshemo

+0

是的,src包有代碼包和img包 – Matthew

回答

0

不要讓Java尋找不存在的圖像; CM0.png不存在!

貸atamanroman和pshemo

+0

不客氣:P – atamanroman

+1

其實它是atamanroman誰發現它(這就是爲什麼+1對他的一個答案從我:D),我只是在我的評論中重複它。 – Pshemo

0

這意味着getClass().getResource("img/CM"+a+".png")可能返回null。 嘗試調試getClass().getResource("img/CM"+a+".png"),例如輸入System.out.println(getClass().getResource("img/CM"+a+".png"))並查看該值。

請檢查路徑是否正確。

這是鏈接到Javadocs

在您的source文件夾下創建一個img文件夾,並將圖像命名爲"CM"+a+".png"評估的文件夾。

+0

好吧,但有沒有辦法使它返回「img/CM(a的值).png? – Matthew

+0

當您將該基元'int'連接到'String'文字時,結果表達式變爲'String'。 – NINCOMPOOP

+0

I嘗試解除它並且它打印null – Matthew

0

Projects選項卡上右鍵單擊您的項目名稱,並選擇new - >Folder。作爲文件夾名使用"images"

enter image description here

現在去Files選項卡,將您的圖像到這個文件夾

enter image description here


現在用加載圖片

new ImageIcon("images/yourImageName.png") 
+0

這不是問題,因爲它顯示爲一個包是一個文件夾,因爲我一直告訴你 – Matthew

+0

@Matthew好吧,如果你真的想使用包作爲圖像的源文件夾,那麼試試這種方式'new ImageIcon(「src/thebutton/img/CM「+ a +」。png「)'但確保'a'不是'0',因爲我的文件夾中沒有看到任何'CM0.png'。我只是警告你,這種方法將來會產生很多問題。爲包外的圖像創建單獨的文件夾是更好的方法。 – Pshemo

+0

問題是,Java正在尋找一個不存在的圖像,正如你所說;謝謝! – Matthew