2013-05-20 99 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);