用Eclipse導出jar包,可能會遇到所用的圖片怎麼打不到jar中。那麼怎樣才能把圖片導入到jar中,好吧,咱們來簡單的說說。分兩種編譯路徑來講。 java
狀況一:eclipse
一、 在Window-Prefences中的Build Path以下:ui
二、 工程temp、包test.sfx及源文件Test.java、存放圖片的文件夾images及圖片surfing.gif的關係以下:spa
Test.java的源碼:.net
package test.sfx;圖片
import javax.swing.*;ip
public class Test {資源
JFrame jf=new JFrame("Test");字符串
JLabel jl=null;get
public Test(){
jl=new JLabel(new ImageIcon(Test.class.getResource("/images/surfing.gif")));
jf.add(jl);
jf.setSize(300,300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
public static void main(String[] args) {
new Test();
}
}
注意粗體部分的爲使用圖片的方法Test.class.getResource("/images/surfing.gif"),Test是使用圖片所在類的類名,字符串前有/
三、 導出jar包名爲test.jar,這個就不用說啦,你們都知道啊
四、 用winrar打開test.jar,以下圖
images裏存放serfing,gif,sfx裏存放的是Test.class。事實上getResource("/images/surfing.gif")的字符串前
【1】 有/時,系統從bin目錄開始搜索,找到images,在找到suring.gif的。打成test.jar文件,這個文件就至關於bin,因此由上面的目錄樹可知依然能夠找到圖片。當咱們在src中建立images文件夾並把圖片放在其中,記得要在工程目錄上右擊選擇refresh,以後運行,eclipse會自動在bin目錄下建立一個文件夾images,存放的資源和src下的是同樣的。就是說eclipse會將src中的文件夾連同.java文件生成的class文件和資源文件一同放到bin下。打成jar後,jar文件就至關於bin。
【2】 沒有/時,是從包目錄開始搜索的,因此能夠把images放到src/test/sfx下面,以後refresh,運行,會發如今bin/test/sfx下有images,其實道理就是粗體部分所說的啊!
【3】 能夠把圖片surfing.gif直接放在src/test/sfx下面,那麼紅體字符串就是surfing.gif
狀況二
1、若是在Window-Prefences中的Build Path以下:
2、工程temp、包test.sfx及源文件Test.java、存放圖片的文件夾images及圖片surfing.gif的關係以下:
3、代碼中的紅體字符串仍是/images/surfing.gif,這裏的搜索就是從工程temp開始的了。打成jar文件後,jar文件也就至關於工程目錄。若是是images/surfing.gif,就是從test/sfx開始搜索,因此能夠把images放在test/sfx下,注意字符串變成了images/surfing.gif,以後refresh。運行正常,打包也能夠運行。
補充
對了還有Test.class.getResource("/images/surfing.gif")能夠用
Test.class.getClassLoader().getResource("images/surfing.gif")來替換,這個類加載器,怎麼查找實在是複雜。在磁盤上文件位置不變的狀況下,代碼中這兩種寫法都是正確的哈。
重點:
咱們把圖片導進jar裏面,這樣才方便程序獲取資源。
因而咱們經過,類名.class.getResource("路徑");來獲取資源的話,在咱們導出的時候就能夠把相應的資源一塊兒導出。
當咱們使用絕對路徑的話,咱們的根目錄就是src文件夾(例如:」/example/image.jpg「)
當咱們使用相對路徑的時候,咱們的初始相對路徑就是對應class所在的文件夾(例如:」example/image.jpg「)