繁体   English   中英

使用Java多线程的交通灯程序

[英]traffic light program using java multithreading

我在两个地方(通过使用“->”来识别)中收到此“线程“主”中的异常java.lang.NullPointerException错误”,我已经跟踪了变量,但似乎找不到错误的地方。

//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");
    }

}
}
public void Simulation() {
}

这不是构造函数。 构造函数没有返回类型。 而是使用:

public Simulation() {
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM