初始化数组:java.lang.NullPointerException

时间:2014-08-07 04:13:40

标签: java arrays short

因此,我在初始化数组时遇到了这个奇怪的错误。会发生什么,是我创建了一个数组,它将抛出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代码在目标代码上运行线程,它使它完美地工作。无论如何,谢谢你的帮助!

1 个答案:

答案 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}}