[英]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()
立即返回,或poll(long timeout, TimeUnit unit)
在指定時間后或事件發生時返回,無論先發生什么。
運行這種觀察者服務最“自然”的地方是后台線程,這樣程序就可以在觀察者等待所尋找的事件時繼續進行。 Callable
/ Future
類非常適合在這里使用。 當觀察者在Thread
或Future
中運行時,主程序可以使用Thread.interrupt()
或Future.cancel()
“停止”它。
並確保加入或守護您創建的線程,否則您的程序將無法完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.