所以我试图将文本框重定向到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
方法正在正确执行)
答案 0 :(得分:0)
在读取/实现输入流时,确保最后一次调用返回换行符
\n'
(后跟-1)。因为如果你是一个行,它会等待最后一个换行符。
所以对我来说,我将文本字段加上添加到换行符中。现在它可以工作,程序完成阅读和打印最终消息。