如何读取java行中的每次输入? 如果使用扫描仪和另一个线程写东西它会破坏。 :(
错误的例子:
Console output: (write hello)
helI'm a thread and I break your sentence!
lo
我知道我可以缓冲System.out,但它应该每次都读取,所以什么时候应该写缓冲输出?
答案 0 :(得分:0)
尝试使用此课程:
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);
注意:在您阅读用户输入时,print方法将阻止任何调用线程。