[英]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
。
您会收到一个带有key
的NullPointerException
,因为您尝试在实例初始化之前在实例上调用cancel()
。 我猜它是在您的课堂上声明为
private WatchKey key;
默认情况下,实例引用类型变量被初始化为null
。 如果您的处决永远不会带您通过
key = watchService.take();
然后key
将保持为null
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.