Необходимо использовать неблокирующую операцию для ожидания ввода пользователя и завершить ее после завершения другой операции - PullRequest
0 голосов
/ 09 июня 2019

Я назначил потоку сканер, который я должен использовать, чтобы заставить программу ждать ввода пользователем ключевого слова (просто чтобы сделать паузу / приостановить выполнение другой операции) и завершить операцию ожидания после завершения другой операции. Только потому, что сканер блокирует, я не могу прекратить его, даже если я уничтожаю назначенный ему поток. Так как я могу сделать это с неблокирующими?

public class UserInpt implements Runnable {

    public UserInpt() {

    }

    @Override
    public void run() {

        boolean ispaused = false;

        KeywordCounter kc = new KeywordCounter();       
        Scanner scanner1 = new Scanner(System.in);

        while (true) {
            String inpt = scanner1.nextLine();

            if (inpt.equals(" ")) { 


                if (ispaused == false) {
                    ispaused = true;
                     kc.pause();
                } else {
                    ispaused = false;
                     kc.resume();
                }
            }
        }
    }

}

И я звоню вышеупомянутым классом из моего основного. Поэтому после того, как я получил результаты из другого потока, я хочу остановить ожидание операции пользовательского ввода.

Runnable pauseunpause = new UserInpt();
new Thread(pauseunpause).start();
...