我正在使用 Java 7 WatchService 来监视目录。我不断更改我正在观看的目录。我遇到了异常:
java.io.IOException:已达到网络 BIOS 命令限制。
在 50 个目录之后。我确定在创建新的 WatchService 之前,我会在创建的每个 WatchService 上调用 close() 。
有谁知道释放 WatchService 的正确方法,这样你就不会遇到这个限制?
谢谢,
戴夫
我正在使用 Java 7 WatchService 来监视目录。我不断更改我正在观看的目录。我遇到了异常:
java.io.IOException:已达到网络 BIOS 命令限制。
在 50 个目录之后。我确定在创建新的 WatchService 之前,我会在创建的每个 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 错误。