如何停止执行:
key = watchService.take()
我代码:
//Watcher
public class DirectoryWatcherExample {
public static void main(String[] args) throws IOException, InterruptedException {
WatchService watchService = FileSystems.getDefault().newWatchService();
//My folder
Path path = Paths.get("D:\java\Input");
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
WatchKey key;
while (((key = watchService.take()) != null)) {
System.out.println(key);
System.out.println(key.toString());
for (WatchEvent<?> event : key.pollEvents()) {
if(event.context().toString().contains(".dat")){
System.out.println("FileName: "+event.context());
}
}
key.reset();
}
watchService.close();
}
}
我的代码正在等待那一行的执行,是否有可能以某种方式停止执行,尝试:
key.cancel();
watchService.close()
但是没有给出任何结果,你能告诉我如何解决这个问题吗?
java.nio.WatchService
的take()
方法定义为不确定等待直到监视事件发生。所以没有办法"停止"。它。
如果你不想等待一个不确定的时间,你可以使用poll()
,它立即返回,或者poll(long timeout, TimeUnit unit)
,它在指定的时间之后或事件发生时返回,无论先发生什么。
运行这种监视服务的最"自然"的地方将是后台线程,以便程序可以在监视程序等待所寻求的事件时继续进行。Callable
/Future
类是这里使用的一个很好的候选类。当监视器在Thread
或Future
中运行时,主程序可以"停止"。
Thread.interrupt()
或Future.cancel()
。并且一定要加入或守护你创建的线程,否则你的程序将无法完成。