2014-02-16 82 views
0

我收到這個「異常在線程」主要「java.lang.NullPointerException錯誤」在兩個地方,我將通過使用「 - >」識別我已追蹤變量,我似乎無法找到哪裏出問題了。使用java多線程的交通燈程序

//simulation.java 




public class Simulation { 

private Thread thread1, thread2, thread3, thread4; 


public static void main(String[] args) { 
    Simulation s = new Simulation(); 
    -> s.go(); 

} 
    public void Simulation(){ 


    TrafficLight light = new TrafficLight(); 
    RoadRunnable road1 = new RoadRunnable(1, light); 
    RoadRunnable road2 = new RoadRunnable(2, light); 
    RoadRunnable road3 = new RoadRunnable(3, light); 
    RoadRunnable road4 = new RoadRunnable(4, light); 
    road1.add(" "); 
    road2.add(" "); 
    road3.add(" "); 
    road4.add(" "); 
    thread1 = new Thread((Runnable) road1); 
    thread2 = new Thread((Runnable) road2); 
    thread3 = new Thread((Runnable) road3); 
    thread4 = new Thread((Runnable) road4); 
} 

public void go() 
{ 
->  thread1.start(); 
    thread2.start(); 
    thread3.start(); 
    thread4.start(); 
} 

} 



//roadrunnable.java 

import java.util.LinkedList; 





public class RoadRunnable extends TrafficLight implements Runnable { 

private LinkedList<String> queue; 
private int number; 
private TrafficLight light; 

public RoadRunnable(int roadNumber, TrafficLight aLight) { 
    number = roadNumber; 
    light = aLight; 
    queue = new LinkedList(); 
} 



public void run() { 

    while (!queue.isEmpty()) { 
     light.turnGreen(number); 
     queue.remove(); 
    } 

} 

public void add(String car) { 

    for (int i = 0; i < 10; i++) { 
     queue.add(car); 
    } 
} 


} 



//trafficlight.java 




public class TrafficLight { 


private int rNumber; 


public TrafficLight() { 
} 


public void turnGreen(int roadNumber) { 
    rNumber = roadNumber; 
    synchronized (this) { 

     System.out.print("Light turned green by road" + rNumber 
       +"\n" 
       + "Waiting for road" + rNumber + "car to clear intersection \n"); 

     for (int i = 10; (i >= 0); i--) { 

      System.out.print(i + " "); 

      try { 
       Thread.sleep(10); 
      } catch (InterruptedException ex) { 
      } 
     } 
     System.out.print("\n \n"); 
    } 

} 
} 

回答

3
public void Simulation() { 
} 

這不是一個構造函數。構造函數沒有返回類型。相反使用:

public Simulation() { 
}