我最近一直致力于在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行。
答案 0 :(得分:0)
原来我是个白痴,并且遇到线程问题。当在UI上单击鼠标时,鼠标处理程序将在单独的线程中调用uiComponent的onclick方法,这意味着游戏将尝试在更改的状态之间进行渲染。