System.in上的Java BufferedReader忽略第一行/命令

System.in上的Java BufferedReader忽略第一行/命令,java,console-application,user-input,Java,Console Application,User Input,我已经为java创建了一个简单的控制台应用程序,使用JavaBufferedReader从终端读取命令。由于某些原因,发出的第一个命令总是被完全忽略。即使在调试时,也不会读取任何值,并且输入字符串仍然没有初始化。发出第二个命令后,输入字符串获取我在控制台中写入的值 我正在使用IntelliJ和带有gradle和JDK 11的集成终端。 我几乎看不出任何原因,为什么第一个命令被完全忽略了 BufferedReader inReader=新的BufferedReader(新的InputStreamR

我已经为java创建了一个简单的控制台应用程序,使用JavaBufferedReader从终端读取命令。由于某些原因,发出的第一个命令总是被完全忽略。即使在调试时,也不会读取任何值,并且输入字符串仍然没有初始化。发出第二个命令后,输入字符串获取我在控制台中写入的值

我正在使用IntelliJ和带有gradle和JDK 11的集成终端。 我几乎看不出任何原因,为什么第一个命令被完全忽略了

BufferedReader inReader=新的BufferedReader(新的InputStreamReader(System.in));
以及主要的shell功能

public void runMainLoop()引发IOException{
布尔退出=假;
而(!退出){
系统输出打印(“提示>”;

final String input=inReader.readLine();//我建议应用分治调试策略:从有效的绝对最小值开始,重新添加部分程序,直到它停止工作。然后检查最后添加的部分

这对我很有效,所以我想你的问题出在其他地方:

BufferedReader inReader = new BufferedReader(new InputStreamReader(System.in));
String input = inReader.readLine();
System.out.println(input);

现在,我在我的IntelliJ中测试了您的代码。当按enter键(第一个命令没有值)时,它会打印“没有指定命令!”,对于其他命令,它会根据您的开关情况打印预期答案。(第一个命令和第一个命令之后)
我的意思是它对我有效。请详细说明您的案例中出现的错误。

只是评论说我无法用IntelliJ和JDK 15重现这一点。什么是“无价值”?它必须是某个东西,或者你是说它是NULL?你是在使用调试器遍历代码以查看第一次迭代发生的情况吗?调试器甚至没有停在那里。它没有值。不是NULL或任何东西,只是什么都没有。我很确定,问题不在代码中。它可能与配置有关,但我知道不知道错误可能在哪里。调试器无法识别我输入了命令。调试器显示“应用程序正在运行”。然后我输入一个新命令,所有下一个命令都在工作,调试器在输入命令后停止。第一个命令之后就不会了。是的,我也认为,这更像是某个配置错误,但我不知道在哪里可以找到它。我试着给你一个工具来找出问题所在。我只是测试了你的最小代码。对于出于某些原因,这对我不起作用。我正在一个全新的gradle项目(Intellij模板)上,只有您提供的代码。问题是:终端从未向我请求输入,只是永远运行而不做任何事情。调试器还停留在“应用程序仍在运行”中在到达第二行后进行状态。以前从未有过这种行为。分而治之的方法仍然适用:删除/替换IDE、工具和JDK,直到它开始工作,然后检查工具链中最后更改的部分。是的,谢谢。我终于找到了它。我在IntelliJ设置中有一个错误“Build,Execution,…>Build Tools>Gradle”。我需要将“Use Gradle from”更改为“Gradle wrapper.properties”文件。我需要更早地进行更改,因为jacoco在使用此设置时无法识别任何测试。| |但在我的新裸机项目上,它仍然无法使用此修复程序。我需要更改“Build and run using”(IntelliJ)设置(而不是Gradle[默认选项])。好的,谢谢。我不知道错误在哪里。但肯定不是代码。这是我目前知道的唯一一件事。它在我的几个设备上都不起作用。所以我起初认为是代码问题。但现在我认为是一些奇怪的配置问题。是的,可能是。