0
我怎樣才能讀取每一次在java行輸入? 如果使用掃描儀,而另一個線程寫入內容則會中斷。 :(閱讀控制檯沒有中斷如果寫東西
錯誤的例子:
Console output: (write hello)
helI'm a thread and I break your sentence!
lo
我知道我可以緩衝的System.out,但它應該每次讀,所以當我應該寫緩衝輸出
我怎樣才能讀取每一次在java行輸入? 如果使用掃描儀,而另一個線程寫入內容則會中斷。 :(閱讀控制檯沒有中斷如果寫東西
錯誤的例子:
Console output: (write hello)
helI'm a thread and I break your sentence!
lo
我知道我可以緩衝的System.out,但它應該每次讀,所以當我應該寫緩衝輸出
與此類嘗試?
public class Console {
private enum Mode { READ_LINE, PRINT_LINE, PRINT }; // TODO: add more Input & Output Modes
private Scanner scanner;
public Console() {
scanner = new Scanner(System.in);
}
public String getUserInput() {
return synchronizedIo(Mode.READ_LINE, null);
}
public void printLine(String text) {
synchronizedIo(Mode.PRINT_LINE, text);
}
public void print(String text) {
synchronizedIo(Mode.PRINT, text);
}
private synchronized String synchronizedIo(Mode mode, String text) {
if (mode == Mode.READ_LINE) {
return scanner.nextLine();
} else if (mode == Mode.PRINT_LINE) {
System.out.println(text);
} else if (mode == Mode.PRINT) {
System.out.print(text);
}
return null;
}
}
做你的輸入和輸出使用這些方法,並輸入和輸出不應弄混並從控制檯。
Console c = new Console();
c.print("Input: ");
String input = c.getUserInput();
c.printLine("Entered text: " + input);
注意:在閱讀用戶輸入時,打印方法將阻止任何調用線程。
掃描儀對象(通常)持有執行,直到你給他們一些東西。所以,您的掃描儀對象可能會從其他線程獲得輸入。 –
你的意思是你能檢測到控制檯有輸入嗎? –
是的,掃描儀拿着它。如果我在char上寫入,它將發送一切垃圾信息,其中holdem ^^ – Shapci