在等待用户输入时关闭扫描程序(或底层inputStream)

时间:2018-06-05 22:42:08

标签: java multithreading java.util.scanner

我有一个场景,计算机对人类玩家进行TicTacToe游戏。用户在控制台(System.in)上输入输入,该输入通过Scanner obj读取。在每次移动之后,程序会做出决定是否任何玩家可以采取行动使游戏更接近获胜(获胜者可以是人或计算机,并不重要)。 我有问题的地方是,在程序决定游戏已经走到尽头之后(无论玩家做出什么动作,游戏都不能赢得),它会终止所有线程,除了正在等待的线程用于在Scanner对象上输入用户。这导致我的程序挂起,直到用户输入内容。我想避免这种情况。 我的问题是:我可以在通过inputStream等待用户输入时关闭/终止线程吗? 我尝试以编程方式关闭扫描器/底层System.in流/中断线程,但没有一个人将线程从“等待用户输入”中删除。状态。

扫描仪:

private Scanner scanner = new Scanner(System.in);

人类玩家线程(在宣布获胜者或裁判决定没有玩家可以获胜时等待用户输入):

    @Override
        public void run() {
            while (!Refree.isWinnerIdentified()) {
                try {
                    System.out.println("Enter next cell location : ");
/*
while execution is waiting on below line for user inputs, all other threads sense that winner is identified and exit. This thread stays in limbo waiting for user inputs
*/
                    String location = scanner.nextLine();

                    //some other code...
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }

        }

2 个答案:

答案 0 :(得分:-1)

在“运行”执行终止后,您是否尝试过执行scanner.close()?

答案 1 :(得分:-1)

您总是可以在等待扫描程序输入的线程上调用interrupt,这应该强制线程从阻塞操作中恢复。