Java:nio-WatchService-Can';无法检测第二个文件创建。为什么?

Java:nio-WatchService-Can';无法检测第二个文件创建。为什么?,java,key,nio,Java,Key,Nio,我试图检测文件夹中的文件创建,但WatchService无法检测第二次文件创建。它在key=watcher.take()处阻塞。知道为什么吗?我使用的是Ubuntu11.04x86 private void watchWorkingDirectory() { try { WatchService watcher = FileSystems.getDefault().newWatchService(); WatchKey key; key =

我试图检测文件夹中的文件创建,但
WatchService
无法检测第二次文件创建。它在
key=watcher.take()
处阻塞。知道为什么吗?我使用的是Ubuntu11.04x86

private void watchWorkingDirectory() {
    try {
        WatchService watcher = FileSystems.getDefault().newWatchService();
        WatchKey key;
        key = Paths.get(tailSource, "").register(watcher, ENTRY_CREATE);

        for (;;) {

            System.err.println("Watching current working directory...............................................");
            // wait for key to be signalled
            key = watcher.take();

            System.out.println("Event detected:");


            for (WatchEvent<?> event : key.pollEvents()) {
                WatchEvent.Kind<?> kind = event.kind();

                if (kind == ENTRY_CREATE) {
                    tailSource = event.context().toString();
                    System.out.println(tailSource);
                    File file = new File(tailSource);
                    BufferedReader br = new BufferedReader(new FileReader(file));
                    System.out.println(br.readLine());
                    tailer = new Tailer(file, tListener, 1, false);
                    (new Thread(tailer)).start();
                }
            }
        }

    } catch (IOException | InterruptedException e) {
        System.out.println(e.getMessage());
    }
}
private void watchWorkingDirectory(){
试一试{
WatchService watcher=FileSystems.getDefault().newWatchService();
监视键;
key=path.get(tailSource,“”)。寄存器(watcher,ENTRY\u CREATE);
对于(;;){
System.err.println(“监视当前工作目录”);
//等待钥匙发出信号
key=watcher.take();
System.out.println(“检测到的事件:”);
for(WatchEvent事件:key.pollEvents()){
WatchEvent.Kind-Kind=event.Kind();
如果(种类==条目\创建){
tailSource=event.context().toString();
系统输出打印项次(尾源);
文件文件=新文件(tailSource);
BufferedReader br=新的BufferedReader(新文件读取器(文件));
System.out.println(br.readLine());
tailer=新的tailer(文件,tListener,1,false);
(新线程(尾部)).start();
}
}
}
}捕获(IOException | InterruptedException e){
System.out.println(e.getMessage());
}
}

}

处理事件后必须调用key.reset()


我假设您的应用程序位于
take()
如果遇到任何意外事件,是否可以记录?