因此,我在初始化数组时遇到了这个奇怪的错误。会发生什么,是我创建了一个数组,它将抛出java.lang.NullPointerException
。正如你在第二行看到的那样,我是正确的(在本文中,data.length / 4
等于1):
short[] data = ByteToShort(Gdx.files.internal(file).readBytes());
O[ID].code.MapFile = new short[data.length / 4][4];
这就是O[ID].code.MapFile
的样子:
public short[][] MapFile;
如果你需要它,这里是堆栈转储:
Exception in thread "LWJGL Application" java.lang.NullPointerException
at com.GS.SE.SonicEngine.LoadMappings(SonicEngine.java:288)
at com.GS.SE.obj.ObjSonic.init(ObjSonic.java:47)
at com.GS.SE.obj.Obj.<init>(Obj.java:8)
at com.GS.SE.SonicEngine.create(SonicEngine.java:41)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:136)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)
我完全坚持这个,似乎没有办法绕过这个或任何东西。任何帮助,将不胜感激!如果您需要更多信息,请在下方发表评论,我会添加。
编辑:正如评论者所问,变量O[ID]
和O[ID].code
不是空的。
编辑2:即使在初始化O[ID].code.MapFile
之后,它也会导致java.lang.NullPointerException
。
编辑3:我发现了问题。这是我认为不重要的事情。当我运行对象代码线程时,它在那里得到很多引用,并且由于一些奇怪的原因,我无法访问在主线程上运行的init代码中的任何数据,但是使得init代码在目标代码上运行线程,它使它完美地工作。无论如何,谢谢你的帮助!
答案 0 :(得分:1)
根据您的问题和代码,我假设这个
O[ID].code.MapFile = new short[data.length / 4][4];
投掷你的NullPointerException
。可能有两个原因,O[ID]
是null
。你没告诉我们O
是什么。 code
字段null
也可能是if (O[ID] != null) {
if (O[ID].code != null) {
O[ID].code.MapFile = new short[data.length / 4][4];
} else {
System.out.println("O[ID].code == null");
}
} else {
System.out.println("O[ID] == null");
}
字段。我们来看看,
if (O[ID].code == null) {
O[ID].code = new Code(); // <-- you didn't tell us.
}
// Then you could
O[ID].code.MapFile = new short[data.length / 4][4];
一种可能的解决方案可能是
{{1}}