我正在开发基于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()
?
答案 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();
}