2011-07-27 81 views
23

我在NetBeans 7.0中有一個Java Project。如何從NetBeans中的'Resources'文件夾正確獲取圖像

我想動態地給一些標籤添加一些圖片。圖像將根據程序的狀態而有所不同。

我在我的項目的'resources'文件夾中放置了一個這樣的圖像'filling.jpg'。

我想正確地訪問此文件(不是通過絕對路徑或相對路徑,因爲這會在構建jar文件時導致問題)。

所以我發現這個方法:

ImageIcon fillingIcon = new ImageIcon(getClass().getClassLoader().getResource("filling.jpg")); 
labelFontFilling.setIcon(fillingIcon); 

它不斷給我顯示java.lang.NullPointerException。 但是我確定存在該映像,因爲我可以將該映像分配給該標籤的NetBeans屬性菜單中的標籤(但我不希望這樣,我想通過Java代碼添加該映像)。

我做錯了什麼,以及如何正確地獲取該圖像?

+1

你能打印給出的路徑嗎?像System.out.println(getClass()。getClassLoader()。getResource(「filling.jpg」)),這可以爲您提供嘗試使用的路徑的線索。 –

+0

它返回'null',所以這是一個Exeption的問題。但我不明白爲什麼它的返回是空的 – ShockwaveNN

+1

和哪裏是你的項目中創建的資源文件夾?它在類路徑中嗎? –

回答

20

謝謝,瓦爾特恩裏克,與您的提示,我設法意識到,我只是輸入此圖像的不正確的路徑。 在我的嘗試之一,我用

String pathToImageSortBy = "resources/testDataIcons/filling.png"; 
    ImageIcon SortByIcon = new ImageIcon(getClass().getClassLoader().getResource(pathToImageSortBy)); 

但正確的方法是我在路項目的名稱使用資源

String pathToImageSortBy = "nameOfProject/resources/testDataIcons/filling.png"; 
ImageIcon SortByIcon = new ImageIcon(getClass().getClassLoader().getResource(pathToImageSortBy)); 
39

這是一個痛苦,使用NetBeans IDE 7.2。

  1. 你需要記住,Netbeans的清理每當你重新生成文件夾,所以
  2. 添加資源文件夾到SRC文件夾:

    • (項目)
      • src
        • 項目包文件夾(包含。java文件
        • 資源任何你想要的名稱
        • 圖像(可選的子文件夾
  3. 清潔後/構建這個結構將會傳播進入Build文件夾:

    • (項目)
      • 構建

          • 項目包文件夾(包含生成的.class文件
          • 資源(你的資源
          • 圖像(您可選的子文件夾

要訪問的資源:

dlabel = new JLabel(new ImageIcon(getClass().getClassLoader().getResource("resources/images/logo.png"))); 

和:

if (common.readFile(getClass().getResourceAsStream("/resources/allwise.ini"), buf).equals("OK")) { 

爲我工作。請注意,在一種情況下有一個前導「/」,而另一個則沒有。 所以根路徑的資源的是build文件夾內的「」文件夾中。

雙擊dist文件夾中的可執行jar文件。資源的路徑仍然有效。

15

我有一個稍微不同的方法,可能有用/更有利於某些人。

在您的主項目文件夾,創建一個資源文件夾。你的文件夾結構應該看起來像這樣。

  • 項目文件夾
    • 構建
    • DIST
    • LIB
    • nbproject的
    • 資源
    • SRC

轉到您的項目的屬性。您可以通過在「項目」選項卡窗口中右鍵單擊項目並在下拉菜單中選擇「屬性」來完成此操作。

在左側的類別下,選擇來源。

在右側的源包文件夾中,使用添加文件夾按鈕添加資源文件夾。一旦你點擊確定,你應該在你的項目下看到一個Resources文件夾。

enter image description here

您現在應該能夠拉使用此行或類似的方法資源:

MyClass.class.getResource("/main.jpg"); 

如果你要創建一個名爲資源文件夾下的圖片包,你可以檢索資源像這樣:

MyClass.class.getResource("/Images/main.jpg"); 
+1

我使用這種方法,但我發現一個令人不安的影響。在構建netbeans加載jar中的所有資源之後,我真的希望資源不在jar中!那麼是否有解決此問題的解決方法? –

+0

不幸的是,java資源方法可能並不完全符合您的需求。但是,如果您的文件駐留在類路徑中,那麼您可以使用ClassLoader.getSystemResource(「somefile.txt」)...您也不再希望如上所述包含資源文件夾。另一個選擇是查看jar的父目錄(或靜態路徑)中的給定文件(資源),並使用File或其他一些等價物打開它們以滿足您的需要。如果該文件不存在,請使用jar中存儲的資源創建它。在這種情況下,它們更像是模板。 –

相關問題