繁体   English   中英

从.jar加载文件时,“ URI不分层”

[英]'URI is not hierarchical' when loading a file from a .jar

我正在研究一个基于JavaOpenGL项目,该项目需要在运行时加载纹理。
这是一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM