释放Java7 WatchService的资源

释放Java7 WatchService的资源,java,watchservice,Java,Watchservice,我正在使用Java7WatchService来监视目录。我不断地更改我正在观看的目录。我遇到了一个例外: java.io.IOException:已达到网络BIOS命令限制 50个目录之后。我确信在创建新的WatchService之前,我会对创建的每个WatchService调用close() 是否有人知道释放WatchService的正确方法,这样您就不会遇到此限制 谢谢 Dave我想你需要做的就是关闭服务。我知道你说你认为你已经这么做了,但我怀疑你错过了一些。例如,在出现异常的情况下,您可能

我正在使用Java7WatchService来监视目录。我不断地更改我正在观看的目录。我遇到了一个例外:

java.io.IOException:已达到网络BIOS命令限制

50个目录之后。我确信在创建新的WatchService之前,我会对创建的每个WatchService调用close()

是否有人知道释放WatchService的正确方法,这样您就不会遇到此限制

谢谢

Dave

我想你需要做的就是关闭服务。我知道你说你认为你已经这么做了,但我怀疑你错过了一些。例如,在出现异常的情况下,您可能无法关闭服务实例。您应该将WatchService实例视为其他IO资源,并在finally块中关闭它;e、 g

WatchService ws = ...
try {
    // use it ...
} finally {
    ws.close();
}
或者使用Java 7“try with resource”语法

WatchService
关闭时,它应立即释放其持有的任何O/S级资源



唯一的另一种可能性是,您在
WatchService
实现中遇到了一些Java错误。

如果我正确阅读了Javadoc,您只需要一个WatchService,您可以在应用程序的开始和结束时实例化它

您可以通过提交。注册您希望一次注册一个的路径和事件,然后获取一个WatchKey。您可以将这些监视键保留在周围,可能是在由路径设置键控的ConcurrentMap中

如果要删除一个,只需在WatchKey上调用cancel()并从映射中删除即可

try (WatchService ws = ...) {
    // use it ...
}