2011-12-16 115 views
2

圖像圖標我爲了得到圖標我的揮杆寫了一個方法:無法獲得在運行的JAR

public Icon getIcon(String iconName) { 

    Icon icon = null; 

    if(iconName.equals("NEXT")){ 
     icon = new ImageIcon(getClass().getResource("resources/img/next.png")); 
    } 

    return icon; 
} 

icon = new ImageIcon(getClass().getResource("resources/img/next.png")); 

進去空指針

我創建了一個源文件夾「資源」和其中的一個文件夾「img」與「next.png」圖標

問題在哪裏?

由於

+0

當它不在可運行Jar中時它工作嗎? – Halfwarr 2011-12-16 19:58:20

+0

沒有它不,我發現爲什麼,我希望我可以在我的話題 – desmatron 2011-12-16 20:32:25

回答

3

對於這項工作,資源文件夾應該在相同的文件夾對應於包的this.getClass()的文件夾。要從類路徑的根開始,請使用getClass().getResource("/resources/img/next.png")。 (帶有前導/

1

所以,我找到了正確的方法:

public static ImageIcon getImageIcon(String iconName) { 

    ImageIcon imageIcon = null; 

    if(iconName.equals("DOWNLOAD")){ 
     imageIcon = new ImageIcon(ImagesLocation.class.getResource("/img/download.png")); 
    } 

    return imageIcon; 
} 

用「資源」源文件夾在項目的相同的水平,並與內一個img文件夾(包樣式)

ImagesLocation是包含此方法

1

對於那些需要幫助的人,在谷歌所遇到的這個頁面泛型類 - 我寫在另一個StackOverflow question的答案給予處理圖像的最佳方式在Java應用程序等等您可以輕鬆訪問Java中所有圖像方法類型的圖像:

這是處理JAR應用程序中所有圖像和圖標的最佳方法。

一旦將所有圖像和圖標壓縮到它自己的JAR文件中 - 通過將圖像JAR文件添加到庫選項卡中,使其現在包含在您的類路徑中來配置您的構建路徑。

然後,只需使用下面的3X行代碼你constuctor開始訪問你需要的任何東西,包括一個SystemTray的圖像不接受簡單的ImageIcon的作爲其主要的圖標(奇怪,我知道)的任何圖像。 3倍線:

URL iconUrl = this.getClass().getResource("/image-iconb.png"); 
    Toolkit tk = this.getToolkit(); 
    someimgicon = tk.getImage(iconUrl); 

(someimgicon僅僅是一個構造函數中聲明圖像變量) 現在你可以設置窗口圖標簡單,如:在同一時間

setIconImage(someimgicon); 

通過聲明設置系統TrayIcon時使用相同的變量:

trayIcon = new TrayIcon(someimgicon, "SystemTray Demo", popupMenu); 

上述內容允許您輕鬆地集中聲明圖像或ImageIcons,而不會出現將圖像資源保留在正確位置的風險。它保持了它的漂亮和整潔,包含所有圖像的JAR在運行時自動編譯並分發程序。

作爲獎勵,一旦JAR位於CLASSPATH註冊 - 你可以保持隨時添加任何其他圖像到同一JAR沒有任何大驚小怪太 - 一切都只是工作和增加的圖像立即提供給您的應用程序。

在我看來更好。