scope jdk_watchService_start. static new Flag #started; static new MultiMap #listeners; static WatchService jdk_watchService_start() { final WatchService service = jdk_defaultWatchService(); if (started.raise()) thread "Watch Service" { while licensed { WatchKey key = service.poll(10, TimeUnit.SECONDS); if (key != null) { Path dir = cast key.watchable(); for (WatchEvent event : key.pollEvents()) pcall { final Path changed = (Path) event.context(); File full = newFile(dir.toFile(), changed.toFile().getPath()); //print("WatchService Changed: " + full + ", " + event.kind()); pcallFAll(listeners.get(key), full); } key.reset(); } } } ret service; } end scope