2013-05-20 98 views
0

我試圖訪問位於正在運行的jar中的圖像。獲取Jar內部文件的路徑

這裏是我的代碼:

Image image = Toolkit.getDefaultToolkit().getImage(
      getClass().getResource("/res/sprites/")); 

上面的代碼工作絕對沒問題。

我遇到的問題是將其轉換爲BufferedImage objet使用的可讀字符串。

這裏是我的代碼:(pathRelativeToThis是一個String)

Image path = Toolkit.getDefaultToolkit().getImage(
      getClass().getResource("/res/sprites/" + pathRelativeToThis)); 
    String image = "file://" + path.toString(); 

    URL url = new URL(image); 
    BufferedImage img = ImageIO.read(url); 

這並不工作,併爲錯誤給javax.imageio.IIOException: Can't get input stream from URL!

這樣做的正確方法是什麼?

+0

'Class.getResource()'返回URL。 'ImageIO.read(URL)'接受URL。你爲什麼要把它轉換成''字符串? –

回答

2

你能做到這樣,並與流直接合作:

InputStream is = getClass().getResourceAsStream("/res/sprites/" + pathRelativeToThis); 
BufferedImage img = ImageIO.read(is); 
is.close(); 

也有你試圖資源URL直接傳遞到的ImageIO?

URL url = getClass().getResource("/res/sprites/" + pathRelativeToThis) 
BufferedImage img = ImageIO.read(url); 
+0

第二行是指url - 可以使用流而不是?認爲可能需要額外的技巧? – djna

+0

不,只是我的複製粘貼錯字,謝謝 – hoaz

+0

作品完美,謝謝! – Nic

1

刪除路徑,只是嘗試這樣做

String image = "file://" + getClass().getResource("/res/sprites/" + pathRelativeToThis); 
URL url = new URL(image); 
BufferedImage img = ImageIO.read(url);