按enter键继续执行异常(Java)

按enter键继续执行异常(Java),java,enter,continue,Java,Enter,Continue,我使用此代码输出文本,并让用户按enter键显示下一行对话框。但是,按一下Enter键会显示两行文本。为什么会这样 public void pressEnterToContinue() { try { System.in.read(); } catch(Exception e) { } } 作为参考,该方法的调用方式如下: pressEnterToContinue(); System.out.println("This is a line of text.");

我使用此代码输出文本,并让用户按enter键显示下一行对话框。但是,按一下Enter键会显示两行文本。为什么会这样

public void pressEnterToContinue() {
    try {
        System.in.read();
    } catch(Exception e) { }
}
作为参考,该方法的调用方式如下:

pressEnterToContinue();
System.out.println("This is a line of text.");
pressEnterToContinue();
System.out.println("So is this.");
pressEnterToContinue();
System.out.println("And this.");
//etc.
第一行单独显示“这是一行文本”。该方法等待用户按enter键,然后显示下两行(“这也是。”和“这是”),此时它应该只显示一行


我确实尝试实现了一个短暂的延迟,但这并没有解决问题。

按enter键作为新行返回。println引入了另一行。当你在控制台输入时,O.S.会回显每个字符,同样地,你的输入会回显,然后你的代码会在屏幕上再次打印出来。这是因为您处理的是一个shell,它本身就是一个程序,可以拾取您的击键并将其返回

可以编写一个不会回显用户输入的shell,但对于易出错的人来说是不切实际的。您可能希望在smtp服务器或http服务器各自的端口上尝试远程登录,并键入相应的命令以发送邮件或返回html页面。那里没有回声。感觉很奇怪。

System.in.read()读取一个字节。我猜您是在一个平台上运行代码,在这个平台上,换行符由一个两字节的CR LF序列表示,因此按Enter键可以满足第一个使用CR的
System.in.read()
调用和第二个使用LF的
System.in.read(
)调用。将代码改为使用
System.console().readline()
应该可以解决此问题,但请检查,以及


这里有一个链接,指向在各种平台上如何表示换行符的信息。

我理解这一点,但我的意思是-“这是如此”和“这”都显示出来了。这给了我一个错误“方法InputStream的方法readLine()未定义。建议的修复是“更改为读取(…)”(我们知道这不是计划)和”将强制转换添加到系统中,在“使行尝试{((BufferedReader)System.in).readLine()”;这给了我一个新的错误“无法从InputStream强制转换到BufferedReader”啊…是的,忘记了。System.console().readLine()工作正常,但请参阅此处的答案以进行进一步讨论和各种方法:我已更新了答案以反映这一点。System.console().readline()在调用该方法后立即显示文本的所有行。如果@edTarik的echo问题mentioend是正确的(我觉得这似乎不正确,但可能是…)然后尝试更改对system.out.println()的system.out.println()调用。如果成功,那么我们都从中学到了一些东西。但没有成功。使用system.console().readLine和system.out.println()同时打印所有行,system.console()和system.out.print()一起打印所有“行”在一行上同时打印两行对话框。System.in.read()和System.out.println()使用正确的换行符一次打印两行,System.in.read()和System.out.print()使用每行一次打印两行对话框。