Java重定向System.in - 调用InputStream.read但没有“返回”

时间:2013-05-05 05:55:33

标签: java inputstream system.in

所以我试图将文本框重定向到System.in。我已经看过这个帖子Redirect System.in to swing component,似乎一切正常:

private class SystemIn extends InputStream {

    @Override
    public int read() {
        int x = GUIConsole.this.read();
        System.out.println("Read called: returning " + x);
        return x;
    }

}

读取似乎正在执行:我有一个帮助

public static String readLine(String msg) {
    String input = "";
    InputStreamReader converter = new InputStreamReader(System.in);
    BufferedReader in = new BufferedReader(converter);

    while (input.length() == 0) {
        try {
            print(msg);
            input = in.readLine().trim();
        } catch (Exception ignore) {
            //
        }
    }
    return input;
}

我打电话给

String in3 = SimpleConsole.readLine("Enter text: ");
System.out.println("You said: " + in3);

因此打印了"Read called: returning #"。当我打电话的时候,我得到正确的字符代码,然后是最后的-1。读取方法将阻塞,直到输入准备就绪,如文档所指定的那样。

但是,我只收到"Read called..."条消息,而下一行("You said...")从未执行(它仍然无法读取)。我无法弄清楚问题是什么 - 如果你想看到更多的代码(尽管我认为"Read called..."消息显示它正在做正确的事情),请告诉我。

我还应该做些什么来调用readLine并从文本框中获取输入?我也尝试在没有运气的情况下覆盖输入流中的其他方法(同样,read方法正在正确执行)

1 个答案:

答案 0 :(得分:0)

像往常一样,我发布问题后很快就找到了答案(我每次都这样说)。无论如何,万一其他人正在寻找这个:

在读取/实现输入流时,确保最后一次调用返回换行符 \n'(后跟-1)。因为如果你是一个,它会等待最后一个换行符。

所以对我来说,我将文本字段加上添加到换行符中。现在它可以工作,程序完成阅读和打印最终消息。