2011-02-22 75 views
3

我知道,我知道,這已被問過。但是我看過的每個資源都使用IconImages,而我只有簡單的圖像。圖像不在jar中顯示,但在編譯器中顯示?

有沒有不同的解決方案?請大家幫忙,因爲我一直在進行研究,試圖找出幾天沒有進展的情況。

Image Floor = Toolkit.getDefaultToolkit().getImage("Floor.PNG"); 

編輯:如果我是確保瓶子不會壓縮和我創造了罐子圖像一個單獨的目錄,並把正確的文件路徑,將此代碼的工作?

+0

你所說的「在編譯器顯示」究竟意味着什麼?編譯器不顯示圖像。 – EJP 2011-02-23 01:21:23

回答

1

請確保您知道您當前的目錄是什麼,以及它與jar中文件位置的關係。

以下是我將如何處理它。

1) Require there to be a file called "images.txt" in the directory with your jar (or bundle it into the jar.) 
2) Make a file called "images.txt" with a format like `FLOOR:C:\\images\\floor.png` 
3) Load this file into memory on load. 
4) Load your images based on the entries in the file 

這會給你沒有,如果它的罐子:)之外定義更改代碼更改圖片的優勢

這不加載,因爲你沒有把路徑圖像在聲明。它希望圖像可以放在任何位置(注意這裏沒有目錄)

您需要將文件名的定義卸載到文件中,或至少保證文件的相對位置。

另一個不錯的選擇是將圖像放入jar本身,比如在img目錄中,並在那裏引用它們。但是,然後對圖像的更改需要一個新的jar,這對於開發目的來說可能不是期望的。

+0

圖像的路徑是正確的,我確定。只是當我啓動jar時,它是一個灰色屏幕,沒有任何圖像。我知道的ImageIcon你使用:'新javax.swing.ImageIcon中(的getClass()的getResource(「myimage.jpeg」)',但我還沒有發現普通圖片類似的話 – DGH94 2011-02-22 23:16:41

+0

是否有邏輯的工作是您的。? JAR清單正確定義? – corsiKa 2011-02-22 23:20:11

+0

是的,我的清單文件工作正常,如果罐子是在同一個目錄中的圖像,該圖像出現。 – DGH94 2011-02-22 23:23:31

3

Toolkit#getImage(String s)查找文件,並且可能您的圖像位於Jar中,並且現在是資源而非文件。期待爲此使用資源。

請注意ImageIO.read(...)可以接受InputStream參數,Class類有一個方法getResourceAsStream(...),它可以將資源放入ImageIO可以讀取的Stream中。試試看。

另外,當你嘗試你在做什麼時,你是否收到任何錯誤消息?

+0

任何錯誤。我想補充日如果jar和圖像位於同一個目錄中,它可以正常工作,但是一旦我將它從外面拉到桌面上,它就會變得灰暗和暗淡。 – DGH94 2011-02-22 23:24:25

+0

請翻譯「將它從那裏推出並放到桌面上......」您可能會認爲我們比您的實際情況更瞭解您的情況。 – 2011-02-22 23:25:35

+0

哈哈,對不起。我最初有jar文件在圖像相同的目錄中,並且它工作正常。然後,我將該目錄外的jar移動到桌面上,在那裏無法訪問圖像,因此不顯示它們。 – DGH94 2011-02-22 23:38:17

1

getImage調用正在文件系統工作目錄中尋找,而不是在Jar文件中。這就是爲什麼當jar文件放在jar文件以外的相同目錄下時,它會成功加載圖像。如果圖像捆綁在jar文件中,它們不再是要訪問的文件系統文件,而是Jar文件資源。有不同的方式來加載這些,但對不起,我不知道它在我的頭頂。

+0

你所說的是完全發生在我身上的事情。 :P – DGH94 2011-02-22 23:41:23

0

你不能指望一個JAR文件神奇地知道你的圖像在哪裏。如果您將JAR文件放在桌面上,它將在桌面上查找文件!該代碼

getImage("Floor.png") 

搜索由默認的JAR(或源項目)的當前目錄和你所期望的是,如果JAR在同一個目錄中,它會工作。如果JAR在桌面上,它怎麼知道Floor.png在哪裏?當然,你可以指定一個硬編碼路徑

getImage("C:\Some Folder Path\Floor.png") 

但隨後Floor.png必須是在C:\一些文件夾路徑\爲JAR才能正常工作。

這聽起來像你真正想要做的是保持圖像的JAR文件(這就像一個ZIP文件)。在這樣做的教程是在這裏:

http://download.oracle.com/javase/tutorial/uiswing/components/icon.html#getresource

0

而且我知道你ImageIcon的使用方法:新javax.swing.ImageIcon中(的getClass()的getResource( 「myimage.jpeg」),但我沒有發現對於普通圖像類似的事情。

<頭臺/ >你應該真正進入閱讀JavaDoc中,否則你是「魔法編碼」。這通常是行不通的。

URL urlToImage = getClass().getResource("myimage.jpeg"); 
// If you need to support Java 1.3 
Image image = Toolkit.getDefaultToolKit().getImage(urlToImage); 
// If your users have dragged their JRE into this millennium 
BufferedImage bufferedImage = ImageIO.read(urlToImage); 
1

檢查文件的擴展名。我遇到了這個問題,因爲擴展名是「PNG」,當我將其改爲「PNG」時,一切正常。