GridWorld Actor - 调用toString()会导致NPE

时间:2014-02-07 19:46:32

标签: nullpointerexception gridworld

我正在GridWorld中编写自定义Rock。但是,当我运行以下代码时:

    for(int i = 0;i<7;i++){
        Grid<Actor> g = getGrid();
        Location l = getLocation();
        int x = l.getCol();
        int y = l.getRow();
        switch(i){
        case 0:
            Location l1 = new Location(x-1,y-1);
            Actor a = g.get(l1);
            if((a.toString()).equals("Infectious Rock")){

            }else if((a.toString()).equals("Infectious Bug")){

            }else{
                a.removeSelfFromGrid();
            }

            break;

(使用不同的变量和不同的坐标重复7次)

这是NPE:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at infectiousRock.act(infectiousRock.java:18)

有谁知道造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:1)

首先,您必须检查调用g.get(1l)时获得的Actor是否存在。有一个简单的解决方法,将当前的if语句更改为:

if(a != null) {
    if((a.toString()).equals("Infectious Rock")){

    }else if((a.toString()).equals("Infectious Bug")){

    }else{
        a.removeSelfFromGrid();
    }
} else
    break;

添加额外的!=null检查应该可以解决问题,如果没有发表评论,我会尽力更新答案。