簡體   English   中英

如何在等待密鑰時停止Java WatchService?

[英]How to stop Java WatchService when is waiting for key?

我正在嘗試停止WatchService正在運行的線程。 但是該怎么做呢? 我的WatchService在其中等待文件夾中的新更新:

key = watchService.take(); 

我從那里開始我的線程:

private void startButtonActionPerformed(ActionEvent e) {

        stateLabel.setText("monitoring...");

        try {
            watchService = FileSystems.getDefault().newWatchService();
        } catch (IOException e1) {
            e1.printStackTrace();
        }

        watchThread = new WatchThread(watchService, key);
        Thread t = new Thread(watchThread);
        t.start();

    }

我試圖停止:

private void stopButtonActionPerformed(ActionEvent e) {
     try {
        if (watchService!=null) {
            key.cancel();
            watchService.close();
        }
     } catch (IOException e1) {
        e1.printStackTrace();
     }
}

當我嘗試執行停止時,在鍵中得到了NullPointerException 當我僅使用watchService.close()關閉watchService時, watchService.close()另一個異常: ClosedWatchServiceException

如何無任何例外地關閉WatchService 對不起,我的英語不好..

由於無法控制UI事件,因此正在發生異常。

當您嘗試使用已調用close()方法的ClosedWatchServiceException時,會發生WatchService 因此,您可能在調用close()之后調用watchService.take()或其他一些WatchService方法。 關閉WatchService並立即引發Exception之后, take()方法可能會WatchService

您會收到一個帶有keyNullPointerException ,因為您嘗試在實例初始化之前在實例上調用cancel() 我猜它是在您的課堂上聲明為

private WatchKey key;

默認情況下,實例引用類型變量被初始化為null 如果您的處決永遠不會帶您通過

key = watchService.take(); 

然后key將保持為null

暫無
暫無

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

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