2013-07-30 59 views
-3

當我調用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); 


} 
} 
+0

的可能重複的[這是一個空指針異常?](http://stackoverflow.com/questions/218384/what- is-a-null-pointer-exception) –

回答

0

當您嘗試訪問空對象方法或參數時發生空指針異常。在你的代碼沒有初始化隊列:

private LinkedList<String> queue 

,並因此面臨空指針異常,而試圖添加元素在你RoadRunnable類的add方法使用queue.add(car);隊列。

您應該在聲明或構造函數初始化你的隊列,這樣的:

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

queue不intantiated。在你的構造函數,你可能想要做的:

queue = new LinkedList<String>(); 
+0

omg謝謝它非常有幫助 –

+0

@LucasLiu,不客氣。很高興有幫助。 – vee

0

在RoadRunnable類沒有什麼是創建隊列變量指向的實際LinkedList的;因此隊列爲空,當您嘗試使用它時您會得到NPE。

0

您沒有初始化隊列。

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

代替

private LinkedList<String> queue; 

參考用於初始化LinkedList