' URI不是分层的'从.jar加载文件时

时间:2014-09-05 17:22:35

标签: java

我正在开发基于Java的{​​{1}}项目,该项目需要在运行时加载纹理。
它是一个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 ,那么如何重写该行以使URI正确,但我需要将其值传递给getResourceAsStream()

1 个答案:

答案 0 :(得分:1)

您正尝试将其作为文件进行访问,但是当您将其打包到jar中时,不再有car.jpg文件,它会被压缩到jar文件中。

因此,您无法创建指向它的File对象,在这种情况下,URL不是普通文件URL,而是“特殊”文件在jar内部。

Java能够解码这些URL,或直接访问资源并为您提供InputStream。

newTexture方法也直接接受URL或InputStream。

使用网址:

TextureIO.newTexture(url, false,"jpg");

使用输入流:

InputStream instr = null;
try {
  instr = Utils.class.getResourceAsStream("/car.jpg");
  TextureIO.newTexture(instr, false, "jpg");
} finally {
  instr.close();
}