import java.util.Scanner;
public class ThreadClass {
public static void main(String[] args)
{
System.out.println("Type the following in 5 seconds");
System.out.println("The quick brown fox jumps over the lazy dog");
try {
Scanner sc = new Scanner(System.in);
String str=sc.nextLine();
Thread.sleep(1000);
System.out.println("Your time is over");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
在上面的程序中,我希望我的程序应该要求用户在五秒(或 5000 毫秒)内输入内容,并在时间结束后自动关闭并显示一条消息“您的时间已结束”。这段代码的问题在于,每当用户输入内容时,除非按下 Enter 键,否则线程似乎无法工作。我尝试在 try catch block 之外甚至在线程下方编写扫描器代码,但它们似乎都不起作用。我认为问题出在我的 Scanner 类上,但无法弄清楚如何输入数据。
最佳答案
提示:您必须有 2 个线程 - 一个用于输入,另一个用于计时器。一旦计时器到期,就中断输入线程。 例如:
final Thread subject1 = new Thread(new Runnable() {
public void run() {
while (!Thread.interrupted()) {
Thread.yield();
}
System.out.println("subject 1 stopped!");
}
});
final Thread subject2 = new Thread(new Runnable() {
public void run() {
while (!Thread.interrupted()) {
Thread.yield();
}
System.out.println("subject 2 stopped!");
}
});
final Thread coordinator = new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(500);
} catch (InterruptedException ex) { }
System.out.println("coordinator stopping!");
subject1.interrupt();
subject2.interrupt();
}
});
subject1.start();
subject2.start();
coordinator.start();
关于java - 使用线程输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37135654/