如何修复nullpointer异常

时间:2013-07-30 04:06:43

标签: java nullpointerexception

当我调用add方法时,我继续获取空指针异常,代码看起来很好,但我不知道出了什么问题。

public class CarRunner {

public static void main(String[] args) {
    TrafficLight light = new TrafficLight();
    RoadRunnable run1 = new RoadRunnable(1,light);
    String car="car";
    for (int i =0;i<100;i++)
    {
        car="car"+i;
        run1.add(car);
    }

    Thread traffic1 = new Thread(run1);
    traffic1.start();
}

}

public class RoadRunnable implements Runnable{

private LinkedList<String> queue;

private int number;

private TrafficLight light;

public RoadRunnable(int roadNumber, TrafficLight aLight) 

{ 
    number = roadNumber;

    light = aLight;

}

public void add(String car)

{

    queue.add(car);


}
 }

4 个答案:

答案 0 :(得分:2)

您的queue未实例化。在构造函数中,您可能希望这样做:

queue = new LinkedList<String>();

答案 1 :(得分:0)

当您尝试访问空对象方法或参数时,会发生空指针异常。在您的代码中,您尚未初始化队列:

private LinkedList<String> queue

因此在尝试使用queue.add(car);类的add方法中的RoadRunnable添加队列中的元素时会遇到Null指针异常。

您应该在声明或构造函数中初始化队列,例如:

public RoadRunnable(int roadNumber, TrafficLight aLight) 
{ 
    // queue initilization
    queue = new LinkedList<String>();
    number = roadNumber;
    light = aLight;
}

答案 2 :(得分:0)

RoadRunnable类中的任何内容都没有为队列变量创建指向的实际LinkedList;因此,队列为空,当您尝试使用它时,您将获得NPE。

答案 3 :(得分:0)

您没有初始化队列。

private LinkedList<String> queue = new LinkedList<String>();

而不是

private LinkedList<String> queue;

初始化LinkedList

的参考