static FixedRateTimer doEvery_stopOnException(double initialSeconds default delaySeconds, double delaySeconds, Runnable r) { if (r == null) null; FixedRateTimer timer = new(shorten(programID() + ": " + r, 80)); r = r { try { r.run(); } catch print e { print("Cancelling timer due to error."); timer.cancel(); } }; timer.scheduleAtFixedRate(smartTimerTask(r, timer, toMS_int(delaySeconds)), toMS_int(initialSeconds), toInt(delay)); ret timer; }