我有一个场景,计算机对人类玩家进行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();
}
}
}
答案 0 :(得分:-1)
在“运行”执行终止后,您是否尝试过执行scanner.close()?
答案 1 :(得分:-1)
您总是可以在等待扫描程序输入的线程上调用interrupt
,这应该强制线程从阻塞操作中恢复。