我尝试用Java构建LWJGL 3的纹理类。
我的loadTexture函数如下所示:
public static Texture loadTexture(String filename) {
int id = -1;
try {
File texture = new File(filename);
if (!texture.exists()) {
System.err.println("File '" + filename + "' does not exist.");
return null;
}
// crash in following line
InputStream stream = ClassLoader.getSystemResource(filename).openStream();
PNGDecoder decoder = new PNGDecoder(stream);
// Some code between here
return new Texture(id, new Vector2i(decoder.getWidth(), decoder.getHeight()));
} catch (IOException e) {
e.printStackTrace();
return new Texture(id, new Vector2i());
}
}
堆栈跟踪如下:
Exception in thread "main" java.lang.NullPointerException
at org.citynopolisproject.graphics.Texture.loadTexture(Texture.java:49)
at org.citynopolisproject.Game.<init>(Game.java:30)
at org.citynopolisproject.Game.<init>(Game.java:33)
at org.citynopolisproject.Game.main(Game.java:188)
文件的位置是:citynopolisproject / res / splash.png,而Texture.java的源文件(如果需要)存储在citynopolisproject / src / org / citynopolisproject / graphics中。
但我不明白为什么它崩溃并抛出NPE。 你有什么想法吗?
问候
答案 0 :(得分:0)
问题(我怀疑)是ClassLoader.getSystemResource(filename)
返回null。这可能是因为您要查找的文件不在类路径中,或者因为类加载器无法通过您引用它的名称找到该资源。
为了帮助我们了解项目结构的更多信息。您要查找的文件在哪里,是否在Jar文件中运行?
您可能需要查找有关如何在类路径上引用资源的更多信息。请记住,一旦你构建了jar,你通常无法用new File(filename)
引用它。
修改强>
您很可能不想绕过从该类路径获取资源。如果你打算对这个程序进行jar操作,那么你应该使用一些即使在它被震动之后也能工作的东西。