无法诊断空指针异常

时间:2015-05-16 10:28:37

标签: java nullpointerexception

我最近一直致力于在java中创建一个MMO,并偶然发现了一个我无法诊断的问题。大约50%的时间程序将在此行上选择一个字符后将指针置零

public void render(Graphics g) {
if (getActiveState() != null) {
            g.drawImage(getActiveState().render().gameImage, 0, 0,     window.getWidth(), window.getHeight(), null);
            getActiveState().renderUI(g);// this line null pointers
        }
    }

由于上面的行工作正常,我可以假设它不是导致问题的getActiveState()方法,所以它必须是renderUI()方法。

public void renderUI(Graphics g) {
    ui.render(g);
}

ui类在状态的构造函数中初始化,因此它不能为null。因此,唯一需要检查的是ui的渲染方法。

public void render(Graphics g) {
    for (int i = 0; i < containers.size(); i++) {
        if (containers.get(i) == null) {
            System.out.println("null container");
        }
        if (containers.get(i).isVisible() && containers.get(i) != null) {
            containers.get(i).render(g);
        }

    }
}

正如你所看到的,除了容器列表之外,这里没有任何东西可以空指针,但是在UI的构造函数中也会初始化它,所以它也不能为空。

如果有人能够发现我错过的任何信息,或者知道造成这种情况的原因,那将是一个很大的帮助。

编辑: 确切的错误是这样的:

Exception in thread "main" java.lang.NullPointerException
at genesis.GameLoop.render(GameLoop.java:129)
at genesis.GameLoop.run(GameLoop.java:100)
at genesis.GameWindow.<init>(GameWindow.java:25)
at genesis.GameWindow.main(GameWindow.java:64)

第129行是renderUI行。

1 个答案:

答案 0 :(得分:0)

原来我是个白痴,并且遇到线程问题。当在UI上单击鼠标时,鼠标处理程序将在单独的线程中调用uiComponent的onclick方法,这意味着游戏将尝试在更改的状态之间进行渲染。