我正在使用Java 7 WatchService来查看目录。我经常更改我正在观看的目录。我遇到了异常:释放Java 7 WatchService的资源
java.io.IOException:已达到网络BIOS命令限制。
50个目录之后。我确定我在创建一个新的WatchService之前调用close()。
有谁知道释放一个WatchService的正确方法,所以你不会遇到这个限制?
感谢,
戴夫
我正在使用Java 7 WatchService来查看目录。我经常更改我正在观看的目录。我遇到了异常:释放Java 7 WatchService的资源
java.io.IOException:已达到网络BIOS命令限制。
50个目录之后。我确定我在创建一个新的WatchService之前调用close()。
有谁知道释放一个WatchService的正确方法,所以你不会遇到这个限制?
感谢,
戴夫
我认为你需要做的所有是close()
服务。我知道你说过你认为你已经这样做了,但我怀疑你错过了一些。例如,如果发生异常,您可能无法关闭服务实例。您应该将WatchService实例视为其他IO资源并在finally块中关闭它;例如
WatchService ws = ...
try {
// use it ...
} finally {
ws.close();
}
或者使用Java 7“try with resource”语法。
try (WatchService ws = ...) {
// use it ...
}
当WatchService
关闭时,应立即释放其持有的任何O/S级别的资源。
唯一的另一种可能性是,您遇到了WatchService
实现中的一些Java错误。
如果我正在阅读Javadoc权限,则只需要一个WatchService,它在应用程序结束时在start和close()处实例化。
您通过.register提交您想要一次注册的路径和事件,并取回WatchKey。您可以将这些WatchKeys放在一边,也许放在由Path键入的ConcurrentMap中。
当你想删除一个,只需调用WatchKey上的cancel()并从Map中移除。