System.console()。readLine()在实际读取内容之前需要newLine标志

问题描述:

我在使用Console类读取用户输入时遇到问题。System.console()。readLine()在实际读取内容之前需要newLine标志

readLine方法读取每个输入的输入,直到输入新行,然后它实际读取稍后返回的输入(第二次输入新行后)。

我不知道这是否与输入缓冲有关。 我试着写一个新行标志到控制台对象:

cons.writer().println (System.getProperty ("line.separator")); 

尝试读取之前,但它并没有帮助。

我使用控制台类,因为它的readPassword方法(我有同样的问题)。

Console cons = System.console(); 
username = String(cons.readLine(format, message)); 
password = String(cons.readPassword(format, message)); 

我还必须补充说明,此代码在循环中运行,直到用户名和密码都正常。

在除第一个迭代之外的每个迭代中,此代码都能正常工作。

+0

尝试在写入新行后刷新写入程序 – shem 2012-07-09 09:13:06

+0

无论写入程序是否刷新,新行都写入命令行。不幸的是它不起作用。 – user1511469 2012-07-09 09:24:42

+0

所以,你可以把“阅读”的代码,或者替代地使用扫描仪类。 – shem 2012-07-09 09:25:54

你是对的。 readLine()读取一行,并且行由一个换行符终止,并且readLine()阻塞,直到它获得一个换行符或EOS。如果您不想要这种行为,请不要拨打readLine()

+0

但它不符合你描述的方式。我需要在输入新行之前输入新行,并在输入第二个新行后返回... – user1511469 2012-07-09 10:30:45

+1

@ user1511469它在键入一个换行符后返回用户名,而在键入另一个后返回密码。但是由于你的代码实际上没有编译,所以不可能进一步评论。我不知道你为什么试图把一个字符串变成一个字符串。 – EJP 2012-07-10 10:23:26

+0

它很难显示所有编译的代码。即使我只提示输入用户名,我所描述的问题也会出现。此提示发生在我的命令行应用程序进行的许多复杂操作之后。在整个过程的开始,它工作正常。但不晚。我bielieve它与键盘缓冲或什么有关。我找不到任何有关它的有用信息。 – user1511469 2012-07-10 12:27:44