2011-01-13 45 views
1

我目前正在編寫一個程序,我需要以罐子形式發送給朋友。該程序有圖像,需要加載程序才能正常工作,我希望它被包含在一個jar中。目前它不能從可執行jar或我通過命令行運行。它在netbeans中工作。我的jar文件不會加載圖像

下面是我使用的代碼:

要加載我使用的圖像:

protected ImageIcon createImageIcon(String path, String description) 
{ 
java.net.URL imgURL = getClass().getClassLoader().getResource(path); 
if (imgURL != null) 
{ 
    return new ImageIcon(Toolkit.getDefaultToolkit() 
        .getImage(imgURL),description); 
} 
else 
{ 
    System.err.println("Couldn't find file: " + path); 
    return null; 
} 
} 

對我也嘗試了

getClass().getResource(path) 

行的網址圖像應該創建的位置是:

this.img =createImageIcon(File.separator+"."+File.separator 
      +"resources"+File.separator+"tiles"+File.separator+"tile.png","tile"); 

我的jar文件是在包含類文件和資源文件夾的文件夾的頂層設置的。

我已經搜索瞭解決這個問題的方法,但我找不到任何可行的方法。

感謝。

+0

在您的「createImageIcon」功能,您在圖像將被創建的文件名傳遞?因爲如果是這種情況,它意味着文件正被保存到/./resources/tiles/tile.png「,這相當於」/resources/tiles/tile.png「,它將位於文件系統的根目錄。在這種情況下,一旦部署它,它就不會被你的類路徑找到。 – 2011-01-13 00:40:07

回答

2

您的網址將評估爲"/./resources/tiles/tile.png"這是沒有意義的(但也許,當你從NetBeans中運行時使用的ClassLoader容忍的錯誤。)
嘗試下探初始"/./"。您也不需要參考File.separator,因爲該字符串被視爲相對URL,並且正斜槓始終有效。

0

不管別的什麼,你的代碼具有失敗緩慢的不可撼動性。

嘗試像

URL x = get class.getclassloader.getresource(...) 
If x == null 
    Throw new defect "expected ... But it wasn't there" 

很抱歉的格式,但iPad使得它太難做是正確的。

1

而不是使用/./resources/back_img.png,使用resources/back_img.pngClassLoader
這裏是例子:

String path = "resources/back_img.png"; 
    ClassLoader cl = ImageHandler.class.getClassLoader(); 
    URL imgURL = cl.getResource(path); 
    //URL imgURL = ImageHandler.class.getResource(path); 

    if (imgURL != null) { 
     ImageIcon icon = new ImageIcon(imgURL, description); 
     Image img = icon.getImage(); 
     Image sizedImg = img.getScaledInstance(width, height, Image.SCALE_DEFAULT); 
     return new ImageIcon(sizedImg); 
    } else { 
     System.err.println("Couldn't find file: " + path); 
     return null; 
    }