如何读取每次在java行中输入的内容?如果一个线程使用了一个扫描器,而另一个线程写了一些东西,那么它就会崩溃。:(
糟糕的例子:
Console output: (write hello)
helI'm a thread and I break your sentence!
lo我知道我可以缓冲System.out,但它每次都应该读取,所以我应该在什么时候写入缓冲的输出?
发布于 2016-03-05 05:47:29
尝试使用这个类:
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方法将阻塞任何调用线程。
https://stackoverflow.com/questions/35804504
复制相似问题