所有源代码:
public abstract class Event{
private long eventTime;
protected final long delayTime;
public Event(long delayTime){
this.delayTime = delayTime;
start();
} public void start(){
eventTime = System.nanoTime() + delayTime;
} public boolean ready(){
return System.nanoTime() >= eventTime;
} public abstract void action();
}import java.util.*;public class Controller{
private List<Event> eventList = new LinkedList<Event>();
public void addEvent(Event c){eventList.add(c);}
public void run(){
List<Event> subList = new LinkedList<Event>();
Iterator<Event> it = eventList.iterator();
while(it.hasNext()){
Event x =it.next();
if(x.ready()){
System.out.println(x);
x.action();
subList.add(x);
}
}
eventList.removeAll(subList);
}
}public class GreenHouseControls extends Controller{
private boolean light = false;
public class LightOn extends Event{
public LightOn(long delayTime){super(delayTime);}
public void action(){
light = true;
}
public String toString(){return "Light is on";}
}
public class LightOff extends Event{
public LightOff(long delayTime){super(delayTime);}
public void action(){
light = false;
}
public String toString(){return "Light is off";}
}
private boolean water = false;
public class WaterOn extends Event{
public WaterOn(long delayTime){super(delayTime);}
public void action(){
water = true;
}
public String toString(){return "Greenhouse water is on";}
}
public class WaterOff extends Event{
public WaterOff(long delayTime){super(delayTime);}
public void action(){
water = false;
}
public String toString(){return "Greenhouse water is off";}
} private boolean fan = false;
public class FanOn extends Event{
public FanOn(long delayTime){super(delayTime);}
public void action(){
fan = true;
}
public String toString(){return "Fan is on";}
}
public class FanOff extends Event{
public FanOff(long delayTime){super(delayTime);}
public void action(){
fan = false;
}
public String toString(){return "Fan is off";}
} private String thermostat = "Day";
public class ThermostatNight extends Event{
public ThermostatNight(long delayTime){super(delayTime);}
public void action(){
thermostat = "Night";
}
public String toString(){return "Thermostat on night setting";}
}
public class ThermostatDay extends Event{
public ThermostatDay(long delayTime){super(delayTime);}
public void action(){
thermostat = "Day";
}
public String toString(){return "Thermostat on day setting";}
} public class Bell extends Event{
public Bell(long delayTime){super(delayTime);}
public void action(){
addEvent(new Bell(delayTime));
}
public String toString(){return "Bing!";}
} public class Restart extends Event{
private Event[] eventList;
public Restart(long delayTime, Event[] eventList){
super(delayTime);
this.eventList = eventList;
for(Event e : eventList)
addEvent(e);
}
public void action(){
for(Event e : eventList){
e.start();
addEvent(e);
}
start();
addEvent(this);
}
public String toString(){return "Restarting system";}
} public static class Terminate extends Event{
public Terminate(long delayTime){super(delayTime);}
public void action(){System.exit(0);}
public String toString(){return "Terminating";}
}
}public class GreenHouseController{
public static void main(String[] args){
GreenHouseControls gc = new GreenHouseControls();
gc.addEvent(gc.new Bell(900));
Event[] eventList = {
gc.new ThermostatNight(0),
gc.new LightOn(200),
gc.new LightOff(400),
gc.new WaterOn(600),
gc.new WaterOn(800),
gc.new FanOn(1000),
gc.new FanOff(800),
gc.new ThermostatDay(1400)
};
gc.addEvent(gc.new Restart(2000, eventList));
if(args.length == 1)
gc.addEvent(new GreenHouseControls.Terminate(new Integer(args[0])));
gc.run();
}
}
public abstract class Event{
private long eventTime;
protected final long delayTime;
public Event(long delayTime){
this.delayTime = delayTime;
start();
} public void start(){
eventTime = System.nanoTime() + delayTime;
} public boolean ready(){
return System.nanoTime() >= eventTime;
} public abstract void action();
}import java.util.*;public class Controller{
private List<Event> eventList = new LinkedList<Event>();
public void addEvent(Event c){eventList.add(c);}
public void run(){
List<Event> subList = new LinkedList<Event>();
Iterator<Event> it = eventList.iterator();
while(it.hasNext()){
Event x =it.next();
if(x.ready()){
System.out.println(x);
x.action();
subList.add(x);
}
}
eventList.removeAll(subList);
}
}public class GreenHouseControls extends Controller{
private boolean light = false;
public class LightOn extends Event{
public LightOn(long delayTime){super(delayTime);}
public void action(){
light = true;
}
public String toString(){return "Light is on";}
}
public class LightOff extends Event{
public LightOff(long delayTime){super(delayTime);}
public void action(){
light = false;
}
public String toString(){return "Light is off";}
}
private boolean water = false;
public class WaterOn extends Event{
public WaterOn(long delayTime){super(delayTime);}
public void action(){
water = true;
}
public String toString(){return "Greenhouse water is on";}
}
public class WaterOff extends Event{
public WaterOff(long delayTime){super(delayTime);}
public void action(){
water = false;
}
public String toString(){return "Greenhouse water is off";}
} private boolean fan = false;
public class FanOn extends Event{
public FanOn(long delayTime){super(delayTime);}
public void action(){
fan = true;
}
public String toString(){return "Fan is on";}
}
public class FanOff extends Event{
public FanOff(long delayTime){super(delayTime);}
public void action(){
fan = false;
}
public String toString(){return "Fan is off";}
} private String thermostat = "Day";
public class ThermostatNight extends Event{
public ThermostatNight(long delayTime){super(delayTime);}
public void action(){
thermostat = "Night";
}
public String toString(){return "Thermostat on night setting";}
}
public class ThermostatDay extends Event{
public ThermostatDay(long delayTime){super(delayTime);}
public void action(){
thermostat = "Day";
}
public String toString(){return "Thermostat on day setting";}
} public class Bell extends Event{
public Bell(long delayTime){super(delayTime);}
public void action(){
addEvent(new Bell(delayTime));
}
public String toString(){return "Bing!";}
} public class Restart extends Event{
private Event[] eventList;
public Restart(long delayTime, Event[] eventList){
super(delayTime);
this.eventList = eventList;
for(Event e : eventList)
addEvent(e);
}
public void action(){
for(Event e : eventList){
e.start();
addEvent(e);
}
start();
addEvent(this);
}
public String toString(){return "Restarting system";}
} public static class Terminate extends Event{
public Terminate(long delayTime){super(delayTime);}
public void action(){System.exit(0);}
public String toString(){return "Terminating";}
}
}public class GreenHouseController{
public static void main(String[] args){
GreenHouseControls gc = new GreenHouseControls();
gc.addEvent(gc.new Bell(900));
Event[] eventList = {
gc.new ThermostatNight(0),
gc.new LightOn(200),
gc.new LightOff(400),
gc.new WaterOn(600),
gc.new WaterOn(800),
gc.new FanOn(1000),
gc.new FanOff(800),
gc.new ThermostatDay(1400)
};
gc.addEvent(gc.new Restart(2000, eventList));
if(args.length == 1)
gc.addEvent(new GreenHouseControls.Terminate(new Integer(args[0])));
gc.run();
}
}
解决方案 »
- NEW了一个frame对象,为啥不能关闭?
- 在一个jlist里add或者remove一条记录怎么实现.资料上和java2s上的例程 都是通过listmodel.addelement...类似的方法实现.但是listmodel下
- 提问,现在JAVA最流行的分布式应用程序解决方案是什么?
- 怎么样在JComboBox中设置类似于Word中ComboBox的效果
- 我写了一个服务器端后台程序,现在是通过bat文件启动他,我想跟着服务器系统一起启动,该怎么做?
- 请教鼠标画图的问题,解决立即结贴
- 怎样像关闭tomcat一样关闭一个java程序?跪求解答!
- 选择java开发工具?循序渐进学好着门语言该选的最好书籍
- java中哪个函数是显示一个对话框的???
- Java小白求教,为什么输出结果是这个?
- 比较字符串,返回结果
- Java synchronized的问题
List<Event> subList = new LinkedList<Event>();
Iterator<Event> it = eventList.iterator();
while (it.hasNext()) {
Event x = it.next();
if (x.ready()) {
System.out.println(x);
//x.action();
subList.add(x);
System.out.println(subList);
}
}
eventList.removeAll(subList);
}
楼主将x.action()注释掉,可以正确运行。出现这个错误的原因是执行x.action()改变了x,这样就会导致it.next()抛出异常
谢谢!何时才能达到你的水平