首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果写了什么,请不要中断地读取控制台

如果写了什么,请不要中断地读取控制台
EN

Stack Overflow用户
提问于 2016-03-05 03:27:59
回答 1查看 131关注 0票数 0

如何读取每次在java行中输入的内容?如果一个线程使用了一个扫描器,而另一个线程写了一些东西,那么它就会崩溃。:(

糟糕的例子:

代码语言:javascript
复制
Console output: (write hello)
helI'm a thread and I break your sentence!
lo

我知道我可以缓冲System.out,但它每次都应该读取,所以我应该在什么时候写入缓冲的输出?

EN

回答 1

Stack Overflow用户

发布于 2016-03-05 05:47:29

尝试使用这个类:

代码语言:javascript
复制
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;
}
}

使用这些方法完成与控制台的所有输入和输出,并且输入和输出不应该混淆。

代码语言:javascript
复制
Console c = new Console();
c.print("Input: ");
String input = c.getUserInput();
c.printLine("Entered text: " + input);

注意:当您读取用户输入时,print方法将阻塞任何调用线程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35804504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档