static java.util.Timer calcOnConceptChangesInOtherProgram(fS programID, int delay, final O runnable, final bool runOnFirstTime) { final File conceptsFile = conceptsFile(programID); ret doEvery_daemon(delay, 0, new Runnable { FileStatus status = runOnFirstTime ? null : fileStatus(conceptsFile); new SingleThread thread; public void run() { FileStatus s = fileStatus(conceptsFile); if (neq(s, status) && !thread.running()) { status = s; thread.go(runnable); } } }); }