如何停止WatchService (java)



如何停止执行:

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.WatchServicetake()方法定义不确定等待直到监视事件发生。所以没有办法"停止"。它。

如果你不想等待一个不确定的时间,你可以使用poll(),它立即返回,或者poll(long timeout, TimeUnit unit),它在指定的时间之后或事件发生时返回,无论先发生什么。

运行这种监视服务的最"自然"的地方将是后台线程,以便程序可以在监视程序等待所寻求的事件时继续进行。Callable/Future类是这里使用的一个很好的候选类。当监视器在ThreadFuture中运行时,主程序可以"停止"。

使用Thread.interrupt()Future.cancel()

。并且一定要加入或守护你创建的线程,否则你的程序将无法完成。

相关内容

  • 没有找到相关文章

最新更新