import java.util.Timer; import java.util.TimerTask; public class GenerationScheduler { private boolean active=false; private final static int timeRate=500; private Timer myTimer; private ModelObservable model; /** * @param model */ public GenerationScheduler(ModelObservable model){ super(); this.model=model; } public void start(){ if (active) { return; } this.active=true; myTimer=new Timer(); myTimer.scheduleAtFixedRate(new GenerationTask(),0,timeRate); System.out.println("started"); } public void stop(){ if (!active) { return; } this.active=false; if (myTimer == null) { throw new InternalError(); } myTimer.cancel(); myTimer=null; System.out.println("stopped"); } public void singleStep(){ model.nextGeneration(); } private class GenerationTask extends TimerTask { public void run(){ model.nextGeneration(); model.notifyObservers(); } } }