我正在使用Java 7 WatchService来监视目录。我经常更改正在查看的目录。我遇到了一个异常(exception):
java.io.IOException:已达到网络BIOS命令限制。
在50个目录之后。我确定我在创建一个新的WatchService之前会调用close()。
有谁知道释放WatchService的正确方法,这样您就不会遇到此限制了吗?
谢谢,
戴夫
最佳答案
我认为您所需要做的就是对服务进行close()
。我知道您说过您认为已经这样做了,但是我怀疑您缺少了一些。例如,在发生异常的情况下,您可能无法关闭服务实例。您应该将WatchService实例视为其他IO资源,并在finally块中将其关闭;例如
WatchService ws = ...
try {
// use it ...
} finally {
ws.close();
}
或使用Java 7“尝试使用资源”语法。
try (WatchService ws = ...) {
// use it ...
}
当
WatchService
关闭时,它应立即释放其持有的所有O/S级别资源。唯一的其他可能性是您在
WatchService
实现中遇到了一些Java错误。