Java ';URI不是分层的';从.jar加载文件时
我正在从事一个基于Java ';URI不是分层的';从.jar加载文件时,java,Java,我正在从事一个基于Java的OpenGL项目,该项目需要在运行时加载纹理。 这是一个Maven管理的项目,打包后所有文件都放在一个.jar 我有以下代码尝试加载纹理: URL url = Utils.class.getResource("/car.jpg"); TextureIO.newTexture(new File(url.toURI()), false); 如果我在Eclipse中运行项目,那么该代码可以正常工作,但是当从命令行打包和执行时,我会得到以下错误(这是指上面的第二行): 假设
Java
的OpenGL
项目,该项目需要在运行时加载纹理。这是一个
Maven
管理的项目,打包后所有文件都放在一个.jar
我有以下代码尝试加载纹理:
URL url = Utils.class.getResource("/car.jpg");
TextureIO.newTexture(new File(url.toURI()), false);
如果我在Eclipse
中运行项目,那么该代码可以正常工作,但是当从命令行打包和执行时,我会得到以下错误(这是指上面的第二行):
假设我需要使用
getResourceAsStream()
,但是我需要将它的值传递到一个新文件()
?您试图将其作为文件访问,但是当您将其打包到一个jar中时,不再有car.jpg文件,它被压缩到jar文件中
因此,您不能将指向它的文件对象装箱,在本例中,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();
}
没有意识到
TextureIO。newTexture
可以接受InputStream
,使用这种方法。
InputStream instr = null;
try {
instr = Utils.class.getResourceAsStream("/car.jpg");
TextureIO.newTexture(instr, false, "jpg");
} finally {
instr.close();
}