我正在使用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错误。

09-25 20:35