解决Java中的空指针异常

编辑我正在添加我的源代码的pastebin,以使其更容易查看我的代码.
    起始类[http://pastebin.com/Q7w3pbC5]
    机器人[http://pastebin.com/BbZRFM5K]
    敌人[http://pastebin.com/N98Ly1uY]

我是一个新的Java程序员,刚遇到他的第一个空指针异常.我在课堂上追逐野鹅,但一无所获.

我正在关注Kilobolt的Java游戏开发教程(http://www.kilobolt.com/game-development-tutorial.html),并且到了最后.不幸的是,我在游戏敌人类的更新函数中遇到了空指针异常.如果需要,我可以发布完整的源代码,但这是我认为最相关的代码片段.
空指针来自

} else if (Math.abs(robot.getCenterX() - centerX) < 5) {

我进行了一些调查,发现敌人班级内的打印机器人打印的内容为空.更深入,我们必须.我从这里的吸气功能获得机器人:

private Robot robot = StartingClass.getRobot();

并且StartingClass中的相应函数是:

public static Robot getRobot() {
    return robot;
}

机器人定义为:

private static Robot robot;

我可以告诉Robot在BeginningClass中不为null,因为我可以调用相同的getter函数并打印出结果.我不明白为什么它不能通过getter函数保留下来.

谢谢.

解决方法:

用该片段了解情况很复杂.
但是分析情况

我假设你有一堂课

class  static StartingClass{

    private static Robot robot;

    public static Robot getRobot() {
        return robot;
    }

}

在某些班级

class someClass{
    someMethod(){
//Business logic
        if{
//Business logic x2
        }else if (Math.abs(robot.getCenterX() - centerX) < 5) { //NULLPOINTER

        }
    }
}

如果您得到一个空指针,并且您还说在那个momentment机器人为空,那么问题显然是,您无法执行null.getCenterX(),显然这将引发异常.
另外,您说在Startingclass机器人中不为null,但实际上没有任何意义,因为如果在StartingClass中robot不为null,则应获取robot的实例.

我们提供了三个可能的修复程序(取决于您应用程序的业务逻辑):

1)假设robot可能为null,我们检查robot不为null:

    class someClass{
        someMethod(){
    //Business logic
            if{
    //Business logic x2
            }else if (robot!= null && Math.abs(robot.getCenterX() - centerX) < 5) { //NULLPOINTER

        }
    }
}

2)假设错误可能是我们在分配之前获取了机器人,而我们恰好在方法执行之前获取了机器人:

 class someClass{
            someMethod(){
        //Business logic
         private Robot robot = StartingClass.getRobot();
                if{
        //Business logic x2
                }else if (robot && Math.abs(robot.getCenterX() - centerX) < 5) { //NULLPOINTER

            }
        }
    }

3)在开始时添加到somemethod(){

private Robot robot = StartingClass.getRobot();
if(robot==null){
   return
}
上一篇:Java-Graph.java中的NullPointerException


下一篇:为什么我可以在Java中抛出null?