Java 將圖片打包到jar中的路徑問題__Java

來源:互聯網
上載者:User

Eclipse使用匯出Jar包後開啟載入不了映像。

出現這種問題的原因大多是因為路徑的問題,往往是在項目中運行正常,但是一旦打包成Jar後就不能正常顯示了,下面總結一下解決此類問題的方法:

一、通過使用外部資源檔的方式解決

把項目打包產生Jar後,再建立一檔案夾,把項目中所有使用的圖片檔案和產生Jar檔案放在該目錄下,只要代碼對圖片檔案的引用路徑正確,如:ImageIcon image=new ImageIcon(SwingResourceManager.getImage("icons/logo.gif"));就可以了。

這種方式下,圖片檔案與類檔案不是一塊放在包中的,類檔案在包中,而圖片檔案在項目根目錄下。

二、通過使用內部資源檔的方式解決

把所用的圖片檔案放在項目使用的包中,打包時把圖片檔案同時打進Jar檔案中。這種方式在具體代碼中應使用下面其中一種:

ImageIcon image = new ImageIcon(this.class.getResource("icons/logo.gif"));

下面對這種方式詳細說明:

 

        當你編寫一個圖形介面的程式的時候,你肯定要使用各種圖片資源。那麼,當你發布你的程式的時候,這些圖片資源如何發布呢。最簡潔的方式就是將這些圖片資源連同你的class檔案一起打包為一個可執行Jar檔案,這樣你只需發布一個jar檔案就囊括了所有的內容,使用者只需雙擊該Jar檔案就能運行程式。如果把圖片打包在Jar檔案中,編寫程式的時候如何訪問這些圖片呢。這些圖片的路徑是什麼呢。可以用getResource()方法來解決這個問題。下面我們具體分析2種最常見的情況:

1、你將所有資源打包為andy.jar,你的類位於一個包中:package andycpp;你的圖片資源全部放在images檔案夾中,而images檔案夾也位於andycpp包內。這樣的話,最終的路徑表現為:

andy.jar

    |__andycpp

             |__  GUITest.class

             |__  images

                         |__ Snap1.jpg

因為圖片檔案夾和引用他的類位於同一個層次,因此可以通過相對路徑來訪問:

        java.net.URL imgURL = GUITest.class.getResource("images/Snap1.jpg");

          ImageIcon img1 = new ImageIcon(imgURL);

這裡需要注意的是大小寫問題。Jar檔案內部對大小寫是敏感的,因此,如果圖片本身叫做snap1.jpg,你把路徑寫成images/Snap1.jpg,那麼結果將找不到該圖片。還要注意的是,每個類(注意,不是對象)都有一個getResource()方法,但是你不能隨便用,你只能使用和圖片檔案夾處於同一層次的類的getResource()方法。比如上圖中,GUITest類和images處於同一層次,所以要使用該類的getResource()方法。

2、另一種情況,如果你的類有很多,並且包結構很複雜,那麼你就不大可能把圖片和類放在同一個層次上,而是應該把圖片放到最外層,讓所有的類通過絕對路徑來訪問該圖片:

andy.jar

    |__andycpp

             |__  GUITest.class

    |__  images

             |__ Snap1.jpg

代碼如下:

java.net.URL imgURL = GUITest.class.getResource("/images/Snap1.jpg");

ImageIcon img1 = new ImageIcon(imgURL);

大家看到和上述代碼的區別了嗎。區別非常細微,僅僅是在“images”的前面加了一個反斜線"/",這個反斜線就表示根目錄,沒有反斜線就表示相對路徑..

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.