[英]'URI is not hierarchical' when loading a file from a .jar
我正在研究一个基于Java
的OpenGL
项目,该项目需要在运行时加载纹理。
这是一个Maven
托管的项目,打包后,所有文件都放在一个.jar
。
我有以下代码尝试加载纹理:
URL url = Utils.class.getResource("/car.jpg");
TextureIO.newTexture(new File(url.toURI()), false);
如果我从Eclipse
运行项目,则该代码可以正常工作,但是从命令行打包并执行该代码时,会出现以下错误(指的是上面的第二行):
java.lang.IllegalArgumentException: URI is not hierarchical
假设我需要使用getResourceAsStream()
,但又需要将其值传递到new File()
,那么如何重写该行,以便URI
正确?
您尝试将其作为文件访问,但是当将其打包到jar中时,不再有car.jpg文件,该文件会压缩在jar文件中。
因此,您无法创建指向该文件的File对象,在这种情况下,该URL不是普通文件URL,而是“特殊” jar文件里面的URL。
Java能够解码这些URL,或直接访问资源并为您提供InputStream。
newTexture方法还直接接受URL或InputStream。
使用URL:
TextureIO.newTexture(url, false,"jpg");
要使用输入流:
InputStream instr = null;
try {
instr = Utils.class.getResourceAsStream("/car.jpg");
TextureIO.newTexture(instr, false, "jpg");
} finally {
instr.close();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.