java中製作的小遊戲生成的jar文件不能顯示圖片

博主最近在設計一個遊戲,叫做21點,有興趣的讀者可以去網上查一下,這是遊戲的截圖

 

這個遊戲跟我們討論的主題有什麼關係呢?我們都知道,在遊戲設計中最重要的就是圖片的顯示問題,我在設計這個遊戲的時候有2個問題:

1.圖片存放在什麼位置?

2.圖片的讀取是以什麼樣的方式?

首先我們來看第二個問題,一般在java裏面讀取圖片的方式有很多種,但是在遊戲中最常見的還是這個方式:

Image img =Toolkit.getDefaultToolkit().getImage("images\\xxx.jpg");

然後將圖片顯示在面板上的語句是:

        g.drawImage(cardImage, x, y, (ImageObserver)p);

這樣的方式本身沒什麼問題,不過還是需要結合第一個問題來討論,這裏運用的是相對路徑,就是說必須在項目中新建一個文件夾,並命名爲images,這裏所說的相對其實是相對於類文件來說的,類文件在讀取圖片的時候如果項目下面沒有Images文件夾肯定會報錯,所以在eclipse中只要加上了這個文件夾,並把相應的圖片放在下面是不會有什麼問題的,最後的運行結果確實如圖所示。

但是,當我們將項目打包成jar文件時,卻沒有這麼幸運了,項目打包之後就是這個樣子:


這樣子有什麼問題呢?我們運行這個jar文件的時候,就是這個樣子:



 

根本就看不到牌面,然而當我們將images文件夾複製粘貼到jar文件並列時,look


 

      居然又能夠顯示圖片了,這就是博主百思不得其解的地方,按理說在jar包中已經包含了類文件,並且類文件也和Iamges在同一個文件夾下面,但是這些類文件反而讀取不到jar包中的iamges,偏偏可以讀取到jar包外面的images,所以這個地方我也沒有搞懂。

      其實問題到了這個地方已經解決了,但是爲了不影響使用,總不能每次做一個遊戲之後,都要在生成jar文件之後,再把images文件夾複製到和jar文件並列,那麼有沒有什麼辦法可以使得只需要生成一個jar文件,該jar文件就可以直接運行,而不用在去複製圖片過。

      答案是可以!

怎麼做呢?只需要把那麼些個圖片直接和類文件放在一起,也就是放在.java文件那裏,就是包中。但是問題來了,把圖片放到包中之後怎麼讀取呢?還能用之前的

Image img =Toolkit.getDefaultToolkit().getImage("images\\xxx.jpg");

嗎?顯然是不行的,就算改變一下路徑

Image img =Toolkit.getDefaultToolkit().getImage("xxx.jpg");

也是不行的,爲啥不行這裏我也不太清楚原理,反正運行的時候就是沒有。所以這裏就用到了另外一種方式

    URL url=getClass().getResource("s1.gif");

    ImageIcon imageIcon=new ImageIcon(url);

    Image image=imageIcon.getImage();

這個是啥玩意其實我也不是很懂,但是這裏面有個方法確實非常有效:

getClass().getResource("s1.gif");

有了這個之後,就可以直接把所有的圖片全部放在類文件下面,然後就再生成jar文件之後就可以直接顯示所有的圖片了,而不用再次複製粘貼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章