我知道,我知道,這已被問過。但是我看過的每個資源都使用IconImages,而我只有簡單的圖像。圖像不在jar中顯示,但在編譯器中顯示?
有沒有不同的解決方案?請大家幫忙,因爲我一直在進行研究,試圖找出幾天沒有進展的情況。
Image Floor = Toolkit.getDefaultToolkit().getImage("Floor.PNG");
編輯:如果我是確保瓶子不會壓縮和我創造了罐子圖像一個單獨的目錄,並把正確的文件路徑,將此代碼的工作?
我知道,我知道,這已被問過。但是我看過的每個資源都使用IconImages,而我只有簡單的圖像。圖像不在jar中顯示,但在編譯器中顯示?
有沒有不同的解決方案?請大家幫忙,因爲我一直在進行研究,試圖找出幾天沒有進展的情況。
Image Floor = Toolkit.getDefaultToolkit().getImage("Floor.PNG");
編輯:如果我是確保瓶子不會壓縮和我創造了罐子圖像一個單獨的目錄,並把正確的文件路徑,將此代碼的工作?
請確保您知道您當前的目錄是什麼,以及它與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,這對於開發目的來說可能不是期望的。
Toolkit#getImage(String s)查找文件,並且可能您的圖像位於Jar中,並且現在是資源而非文件。期待爲此使用資源。
請注意ImageIO.read(...)可以接受InputStream參數,Class類有一個方法getResourceAsStream(...),它可以將資源放入ImageIO可以讀取的Stream中。試試看。
另外,當你嘗試你在做什麼時,你是否收到任何錯誤消息?
getImage調用正在文件系統工作目錄中尋找,而不是在Jar文件中。這就是爲什麼當jar文件放在jar文件以外的相同目錄下時,它會成功加載圖像。如果圖像捆綁在jar文件中,它們不再是要訪問的文件系統文件,而是Jar文件資源。有不同的方式來加載這些,但對不起,我不知道它在我的頭頂。
你所說的是完全發生在我身上的事情。 :P – DGH94 2011-02-22 23:41:23
你不能指望一個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
而且我知道你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);
檢查文件的擴展名。我遇到了這個問題,因爲擴展名是「PNG」,當我將其改爲「PNG」時,一切正常。
你所說的「在編譯器顯示」究竟意味着什麼?編譯器不顯示圖像。 – EJP 2011-02-23 01:21:23