私はユーザーに時間制限を課すコンソールアプリケーションを作ろうとしています。ユーザーは特定の数字を入力することが予想されますが、一定の時間(10秒)を過ぎると入力モードが解除され、ユーザーに時間が経過してプログラムが実行されることが通知されます。これは私のコードです:コンソールからの入力を取り消すにはどうすればいいですか?
final InputStreamReader isr = new InputStreamReader(System.in);
final BufferedReader br = new BufferedReader(isr);
TimerTask task = new TimerTask() {
@Override
public void run() {
try {
System.in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
};
new Timer().schedule(task, 10000);
try {
String line = br.readLine();
if (line == null) {
System.out.println("TIME EXPIRED");
} else {
System.out.println("TEXT: " + line);
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("END");
プログラムが入力モードで無期限にスタックしているような場合を除いて、正しく動作しているようです。それはコンソールに "END"を吐き出しますが、プログラムは終了しません。それはまだユーザーからの入力を期待しているようです。私は何を間違えたのですか?それとももっと良い方法がありますか?
それは尋ねたと回答されています。http:// stackoverflow.com/questions/804951/is-it-possible-to-read-from-a-java-inputstream-with-a-timeout –
スレッドスタックをダンプしようとしましたか? 'kill -QUIT'またはjconsoleがそれらを表示するかもしれません。 @evanwongが指摘しているように、あなたはあなたがどこにいると思うかは分からない。どのユーザースレッドがデーモンではないのかが分かります。 – Gray