1
所以我試圖做一個控制檯應用程序,強加給用戶一個時間限制。用戶需要輸入一定的數字,但經過一定的時間(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 – 2012-04-02 20:43:56
您是否嘗試轉儲線程堆棧? 'kill -QUIT'或者jconsole可能會讓你看到它們。正如@evanwong指出的那樣,你不會陷入你認爲自己的地方。你可以看到哪些用戶線程不是守護進程,這可能是問題。 – Gray 2012-04-02 21:29:16