2013-11-14 138 views
1

當我創建JAR時,JAR將不會讀取其中的文件夾,只有JAR文件夾中的文件夾。好的,那不是很具描述性。所以這裏是我編輯支持的一張照片。 enter image description hereJava jar不能從jar中讀取文件,只有外部文件夾?

我希望你現在明白了。那麼我該如何解決這個問題?我已經在eclipse中有res和stats構建路徑的一部分了,現在呢?

我的代碼用於讀取資源:

Image player; player = new ImageIcon("res/player.png").getImage();

+0

請出示你用來加載資源的代碼。 – dnault

+1

發送代碼,沒有照片... – thst

+0

解壓縮Jar並確保「res」包含在中。確保您正在使用'Class#getResource'或'Class#getResourceAsInputStream'加載資源 – MadProgrammer

回答

5

當使用ImageIcon和傳遞一個String,預計該參數指的是File

JavaDocs

從指定文件一個ImageIcon。 ...指定的字符串 可以是文件名或文件路徑

文件和「資源」是不同的東西。

相反,嘗試使用更多的東西一樣......

new ImageIcon(getClass().getResource("res/player.png")); 

假設res/player.png駐留在側罐子res目錄中。

根據關係到類試圖加載資源,資源的位置,您可能需要使用

new ImageIcon(getClass().getResource("/res/player.png")); 

,而不是...

更新

的一些建議正如EJP指出的那樣,您應該準備好找到資源的可能性。

URL url = getClass().getResource("/res/player.png"); 
ImageIcon img = null; 
if (url != null) { 
    img = new ImageIcon(url); 
} 
// Deal with null result... 

而且您應該使用ImageIO.read來讀取圖像。除此之外,它支持更多的(並且可以支持更多的未來)的圖像格式的事實,它返回之前加載圖像並拋出IOException如果圖像不能被讀取...

URL url = getClass().getResource("/res/player.png"); 
ImageIcon icon = null; 
if (url != null) { 
    try { 
     BufferedImage img = ImageIO.read(url); 
     icon = new ImageIcon(img); 
    } catch (IOException exp) { 
     // handle the exception... 
     exp.printStackTrace(); 
    } 
} 
// Deal with null result... 
+2

並確保getResource()結果不爲空。 – EJP

+0

@EJP +1改爲使用ImageIO.read – MadProgrammer