嗯,我真的不知所措。我尝试了一些JOGL并希望在Object上获得纹理。我通常这样做:
Texture[] thumbs = new Texture[pics.length];
try {
for (int i = 0; i < thumbs.length; i ++){
InputStream stream = getClass().getResourceAsStream(pics[i].getPath());
data = TextureIO.newTextureData(stream, false, "jpg");
thumbs[i] = TextureIO.newTexture(data);
}
} catch (IOException e) {
e.printStackTrace();
}
通常这可以正常工作,如果jpg文件在源目录中,但这次文件位于其他地方,我收到一个IOException
,表示流是null
。
pics[i].getPath()
返回此字符串:C:\beispieluser\bjoern\eigene_bilder\eckelsheim.jpg
。这是文件所在的确切路径。有人可以告诉我,我的想法在哪里出错了吗?
答案 0 :(得分:4)
getResourceAsStream()
和朋友们只会打开“类路径资源”,它们是类路径中出现的文件以及编译的类。要打开该文件,请使用new File()
或(在Java 7上)Files.newInputStream()
。
答案 1 :(得分:0)
getResourceAsStream()查找类路径中的资源。我很确定它不适用于磁盘上其他地方的绝对路径。
答案 2 :(得分:0)
代码:
try{
for (int i = 0; i < thumbs.length; i ++){
File file = new File(pics[i].getPath());
FileInputStream stream = new FileInputStream(file);
data = TextureIO.newTextureData(stream, false, "jpg");
thumbs[i] = TextureIO.newTexture(data);
}
} catch (IOException e) {
e.printStackTrace();
}