繁体   English   中英

如何在等待密钥时停止Java WatchService?

[英]How to stop Java WatchService when is waiting for key?

我正在尝试停止WatchService正在运行的线程。 但是该怎么做呢? 我的WatchService在其中等待文件夹中的新更新:

key = watchService.take(); 

我从那里开始我的线程:

private void startButtonActionPerformed(ActionEvent e) {

        stateLabel.setText("monitoring...");

        try {
            watchService = FileSystems.getDefault().newWatchService();
        } catch (IOException e1) {
            e1.printStackTrace();
        }

        watchThread = new WatchThread(watchService, key);
        Thread t = new Thread(watchThread);
        t.start();

    }

我试图停止:

private void stopButtonActionPerformed(ActionEvent e) {
     try {
        if (watchService!=null) {
            key.cancel();
            watchService.close();
        }
     } catch (IOException e1) {
        e1.printStackTrace();
     }
}

当我尝试执行停止时,在键中得到了NullPointerException 当我仅使用watchService.close()关闭watchService时, watchService.close()另一个异常: ClosedWatchServiceException

如何无任何例外地关闭WatchService 对不起,我的英语不好..

由于无法控制UI事件,因此正在发生异常。

当您尝试使用已调用close()方法的ClosedWatchServiceException时,会发生WatchService 因此,您可能在调用close()之后调用watchService.take()或其他一些WatchService方法。 关闭WatchService并立即引发Exception之后, take()方法可能会WatchService

您会收到一个带有keyNullPointerException ,因为您尝试在实例初始化之前在实例上调用cancel() 我猜它是在您的课堂上声明为

private WatchKey key;

默认情况下,实例引用类型变量被初始化为null 如果您的处决永远不会带您通过

key = watchService.take(); 

然后key将保持为null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM