簡體   English   中英

我如何停止 WatchService (java)

[英]How can i stop WatchService (java)

如何停止執行:

key = watchService.take()

我的代碼:


//Watcher
public class DirectoryWatcherExample {

    public static void main(String[] args) throws IOException, InterruptedException {

        WatchService watchService = FileSystems.getDefault().newWatchService();
        //My folder
        Path path = Paths.get("D:\\java\\Input");
        
        path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
        WatchKey key;
        while (((key = watchService.take()) != null)) {
            
            System.out.println(key);
            System.out.println(key.toString());
            
            for (WatchEvent<?> event : key.pollEvents()) {
                if(event.context().toString().contains(".dat")){
                
                    System.out.println("FileName: "+event.context());
            
                }
            }
            key.reset();
        }

        watchService.close();
    }

}

我的代碼正在等待該行的執行,是否有可能以某種方式停止執行,嘗試過:

 key.cancel();
 watchService.close()

但這沒有給出任何結果,你能告訴我如何解決這個問題嗎?

java.nio.WatchServicetake()方法被定義不確定地等待,直到發生監視事件。 所以沒有辦法“阻止”它。

如果您不想等待不確定的時間,您可以使用poll()立即返回,或poll(long timeout, TimeUnit unit)在指定時間后或事件發生時返回,無論先發生什么。

運行這種觀察者服務最“自然”的地方是后台線程,這樣程序就可以在觀察者等待所尋找的事件時繼續進行。 Callable / Future類非常適合在這里使用。 當觀察者在ThreadFuture中運行時,主程序可以使用Thread.interrupt()Future.cancel() “停止”它。

並確保加入或守護您創建的線程,否則您的程序將無法完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM