2014-10-07 33 views
1

我試圖做出與圖標按鈕我在哪裏把圖像的圖像在Java(NetBeans),我怎麼鏈接他們的代碼?

public ImageIcon Flag = new ImageIcon(getClass().getResource("resources/Flag.png")); 

給了我一個空指針異常的JFrame類

「C:\用戶\哈利迪\文檔\的NetBeansProjects \掃雷\資源\標誌.png「

是完整的目錄到達我想要的圖像 我創建了文件夾資源來容納我需要的圖像 我應該在哪裏放置圖像?我應該寫什麼代碼行?

在此先感謝

+0

將資源文件夾放在src中,並在當前使用的路徑的開頭使用'/'。 – 2014-10-07 12:52:40

+0

引用的其他參考文獻[here](http://stackoverflow.com/tags/embedded-resource/info)。 – trashgod 2014-10-07 13:08:36

回答

1

您可以簡單地將文件夾資源放置到具有編譯類的文件夾中,然後像這樣製作ImageIcon。

public ImageIcon Flag = new ImageIcon("resources/Flag.png"); 
+2

雖然這個答案將從IDE工作,但一旦應用程序打包到罐子裏,它將不再工作 – 2014-10-07 13:16:47

+0

感謝您糾正我,我仍然是初學者。我只使用它而沒有製作jar包。我可以問你,爲什麼它不起作用,如果我把我的應用程序打包成一個罐子? – 2014-10-07 13:29:36

+0

當你將一個字符串傳遞給'ImageIcon'時,它將在工作目錄中查找文件系統上的文件。在IDE中,工作目錄是Project Root。這就是爲什麼這可以在IDE中工作。但是一旦在jar中,它就成爲一個二進制資源,需要通過URL訪問。在OP的當前文件結構的情況下,除非您自定義IDE的構建配置,否則文件甚至可能不會放入jar中。我通常把我所有的資源放在'src'中,並使用'Class.getResource(「/ path/to/resources/image.png」);'...... – 2014-10-07 13:34:53

3

當你使用getClass().getResource()加載您的圖像,其實JVM使用您的CLASSPATH加載資源(你應該在Class#getResource(...)仔細看)。因此,爲了讓您的資源可用,您必須將其推送到您的項目輸出文件夾(必須是類似於target,不是?)。

-1

創建一個包,說ImgPack並粘貼所有的圖像到這個包,並使用

ImageIcon ii = new ImageIcon(System.getProperty("user.dir")+"\\src\\ImgPack\\<Imagename.extention>"); 
4

嘗試使用用同樣的方法包路徑訪問的所有圖像。例如,如果我的圖像位於org.nisheeth.resources包中,則應如下編寫。

public ImageIcon flag = new ImageIcon(Test.class.getResource("/org/nisheeth/resource/Flag.png")); 
3

至於你問約定:使用Maven的建設基礎設施,你就必須

  • 的src/main/JAVA - Java包
  • 的src /主/資源 - 樣的資源你圖片
  • src/main/resources/images/Flag.png - 一些資源(無約定)

在你創建罐子/ .classes

  • /images/Flag.png

    public ImageIcon Flag = new ImageIcon(getClass().getResource("/images/Flag.png")); 
    

這裏,Class.getResource()使用至包裝之類的相對路徑;因此,使用上面的絕對路徑(「/ ...」)是最簡單的。

相關問題