我怎样才能停止 WatchService (java)
How can i stop 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.WatchService
的 take()
方法是 定义的 以 不确定地等待 直到发生监视事件.所以没有办法“阻止”它。
如果不想等待不确定的时间,可以立即使用poll()
which returns,或者在指定时间后使用poll(long timeout, TimeUnit unit)
which returns或者当事件发生时,无论先发生什么。
最'natural' 到 运行 这种观察者服务的地方是后台线程,这样程序可以在观察者等待寻找的事件时继续进行。 Callable
/Future
类 很适合在这里使用。当观察者在 Thread
或 Future
中 运行ning 时,主程序可以使用 Thread.interrupt()
或 Future.cancel()
.[=20= 来“停止”它]
并且一定要加入或守护您创建的线程,否则您的程序将无法完成。
如何停止执行:
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()
which returns,或者在指定时间后使用poll(long timeout, TimeUnit unit)
which returns或者当事件发生时,无论先发生什么。
最'natural' 到 运行 这种观察者服务的地方是后台线程,这样程序可以在观察者等待寻找的事件时继续进行。 Callable
/Future
类 很适合在这里使用。当观察者在 Thread
或 Future
中 运行ning 时,主程序可以使用 Thread.interrupt()
或 Future.cancel()
.[=20= 来“停止”它]
并且一定要加入或守护您创建的线程,否则您的程序将无法完成。