[英]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.