2014-09-21 79 views
2

我有一個簡單的swing應用程序,它帶有一個包含各種組件的JFrame。在JFrame上我有一個擴展JPanel的自定義工具欄類。在JPanel上,我計劃添加帶圖像圖標的按鈕。我的目錄結構如下:從jar文件中加載圖像(使用Eclipse IDE)

  • 項目/ src目錄/ GUI(包適用於應用程序的源文件)
  • 項目/ src目錄/圖片(包包含一個jar文件jlfgr-1_0.jar與按鈕圖標和/或單獨的圖像文件)

問題是我想避免將單個圖像文件複製到圖像包。我寧願只是直接從jar文件加載圖像。我有私人的方法,返回適當的圖標。此方法適用,例如,如果我拖動圖像文件的圖像包和呼叫:

button.setIcon(createIcon("/images/Save16.gif")); 

private ImageIcon createIcon(String path) { 
    URL url = getClass().getResource(path); 
    ImageIcon icon = new ImageIcon(url); 

    if(url == null) { 
     System.err.println("Unable to load image: " + path); 
    } 
    return icon; 

我知道這是基本的,但我怎麼能直接得到我的圖片來自jar文件在我目前的設置? 謝謝。

+0

可能重複http://stackoverflow.com/questions/6373621/loading-images-from-jars-for-swing-html ) – Smutje 2014-09-21 17:25:55

+0

該代碼*已經*從應用程序類路徑加載圖像的方式,我們將從Jar加載資源! – 2014-09-21 23:34:00

回答

1

您可以從流中讀取的圖像,這得益於javax.imageio.ImageIO

private ImageIcon createIcon(String path) { 
    BufferedImage image = ImageIO.read(getClass().getResourceAsStream(path)); 
    ImageIcon icon = new ImageIcon(image); 
    return icon; 
} 
0

這是另一種方式。的圖像是在位置src/images

BufferedImage myPicture = null; 
try { 
    myPicture = ImageIO.read(this.getClass().getResource("images/Picture2.png")); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    try { 
     myPicture = ImageIO.read(this.getClass().getResource("images/broken_image.jpg")); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
} 
JLabel picLabel = new JLabel(new ImageIcon(myPicture)); 
panel.add(picLabel); 
[從搖擺HTML罐加載圖像(的