微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我怎样才能停止 WatchService (java)

如何解决我怎样才能停止 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()

但这并没有给出任何结果,你能告诉我如何解决这个问题吗?

解决方法

take()java.nio.WatchService 方法定义不确定地等待,直到发生被监视的事件。所以没有办法“阻止”它。

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

运行这种观察者服务最“自然”的地方是后台线程,这样程序就可以在观察者等待寻找的事件时继续进行。 Callable/Future 类非常适合在这里使用。当观察者在 ThreadFuture 中运行时,主程序可以使用 Thread.interrupt()Future.cancel()“停止”它。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。