diff --git a/tools/cooja/java/se/sics/cooja/Simulation.java b/tools/cooja/java/se/sics/cooja/Simulation.java index 71c5bfc86..0286c8da6 100644 --- a/tools/cooja/java/se/sics/cooja/Simulation.java +++ b/tools/cooja/java/se/sics/cooja/Simulation.java @@ -659,7 +659,10 @@ public class Simulation extends Observable implements Runnable { availableMoteTypes, moteTypeClassName ); - if (newClass != null && !newClass.equals(moteTypeClassName)) { + if (newClass == null) { + throw new MoteType.MoteTypeCreationException("No mote type class selected"); + } + if (!newClass.equals(moteTypeClassName)) { logger.warn("Changing mote type class: " + moteTypeClassName + " -> " + newClass); moteTypeClassName = newClass; } @@ -989,7 +992,7 @@ public class Simulation extends Observable implements Runnable { * @param newSpeedLimit */ public void setSpeedLimit(final Double newSpeedLimit) { - invokeSimulationThread(new Runnable() { + Runnable r = new Runnable() { public void run() { if (newSpeedLimit == null) { speedLimitNone = true; @@ -1008,7 +1011,14 @@ public class Simulation extends Observable implements Runnable { Simulation.this.setChanged(); Simulation.this.notifyObservers(this); } - }); + }; + if (!isRunning()) { + /* Simulation is stopped, change speed immediately */ + r.run(); + } else { + /* Change speed from simulation thread */ + invokeSimulationThread(r); + } } /**