【发布时间】:2013-09-06 18:46:29
【问题描述】:
我正试图在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 时,我得到另一个异常:ClosedWatchServiceException。
如何在没有任何异常的情况下关闭WatchService?
对不起我的英语不好..
【问题讨论】:
-
请告诉我们你得到的异常。
-
@Sotirios Delimanolis 更新我的问题
-
尝试在
key.cancel()行之前打印key,以确保key不为空。 -
在使用户界面可见之前将
key设置为非空值,以防止出现 NullPointerException。
标签: java multithreading watchservice