我有一个场景,计算机对人类玩家玩TicTacToe游戏。用户在控制台(System.in)上输入,该输入通过扫描器OBJ读取。在每一次移动之后,程序做出决定,如果任何一个玩家能够做出一个移动,将使游戏更接近胜利(赢家可以是人类或计算机,这并不重要)。我的问题是,当程序决定游戏已经进入死胡同(无论哪一个玩家做出什么动作,游戏都不可能由哪一个获胜)时,它会终止所有线程,除了一个等待扫描器对象上的用户输入的线程。这导致我的程序挂起,直到用户输入一些东西。我想避免这件事。我的问题是:当线程等待用户通过inputStream输入时,我可以关闭/终止它吗?我尝试过以编程方式关闭Scanner/Underlaying System.in Stream/Interrupting thread,但都没有将线程从“等待用户输入”状态中取出。
扫描仪:
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();
}
}
}
您是否尝试在“run”执行终止后执行scanner.close()?
我制作了一个程序来获取用户输入并将其传递出去,但出于某种原因,scanner类和下一行甚至不等待用户获取输入,而是跳过了整个获取输入部分。下面是我的代码: 基本上,程序就结束了,我没有输入任何输入,我找不到一个解决方案或解释这一点。
问题内容: 我正在使用Java的扫描仪读取用户输入。如果我仅使用nextLine一次,那就可以了。使用两个nextLine时,第一个不会等待用户输入字符串(第二个会输入)。 输出: X:Y :(等待输入) 我的密码 任何想法为什么会发生这种情况?谢谢 问题答案: 您可能像以前那样调用方法。这样的程序是这样的: 演示您所看到的行为。 问题是不消耗,因此下一个调用将消耗它,然后等待读取的输入。 您需要
我这里有两个代码块。一个扫描器正确地等待用户输入,另一个则直接通过它并调用,返回。下面是工作的块: 下面是没有的块: 这两个都是单独的类,并且是从另一个类中的main方法调用的。基本上,调用,后者又调用某个Player类的方法...这是非工作代码所在的地方。程序中是否有不适合接受输入的时候?我的印象是,任何时候我需要用户输入,我都可以使用这种方法。谢谢!
为此,我创建了一个名为的单例。这个类处理所有的输入阅读内容。我创建了一个名为的方法,它将回调作为参数。在这个方法中,我创建了一个新线程,并在其中等待使用的输入。这个类还有方法,它向上面描述的线程发送中断消息。下面是该类的当前实现: 这个代码极不可靠。我一会儿就告诉你我的意思。我制作了一个名为Client的玩具类,在中,我用计时器模拟了消息收入。 以下是它的工作原理: 我知道这个问题非常长(也许是不
我正在使用Java的扫描仪读取用户输入。如果我只使用nextLine一次,它可以正常工作。对于两个nextLine,第一个不等待用户输入字符串(第二个)。 输出: X:Y:(等待输入) 我的代码 你知道为什么会发生这种事吗?谢谢