Java 扫描器;“没有下一行”-错误

Java 扫描器;“没有下一行”-错误,java,java.util.scanner,Java,Java.util.scanner,我搞不懂。在第二次运行时,它甚至不会等待用户输入,而是使用 线程“main”java.util.NoSuchElementException中出现异常:未找到任何行 Ofc如果没有输入,我假设几乎没有一行。那么我能在这里做什么呢 while (go) { Scanner jain = new Scanner(System.in); String jainstr = jain.nextLine(); jain.close(); } Intell

我搞不懂。在第二次运行时,它甚至不会等待用户输入,而是使用

线程“main”java.util.NoSuchElementException中出现异常:未找到任何行

Ofc如果没有输入,我假设几乎没有一行。那么我能在这里做什么呢

 while (go) {

        Scanner jain = new Scanner(System.in);
        String jainstr = jain.nextLine();
        jain.close();
}
Intellij 2018.2

jain.close()
关闭扫描仪,其作用是关闭底层流
系统.in

当您再次尝试从该流读取时,您将得到一个错误,因为您已经关闭了它

不要在回路中关闭扫描仪

此外,不要在每个循环上创建新的扫描仪。在循环之前创建扫描仪,并在循环内重复使用

你真的不需要关闭扫描仪。IDE经常抱怨您没有关闭它,因为如果流类似于
FileInputStream
,您确实需要关闭它以避免资源泄漏


一般的规则是,你应该只关闭你打开的流:你没有打开
系统。在
中,所以不要关闭它。

Ofc如果没有输入,我认为几乎没有一行是真的,但扫描仪等待输入。您应该尝试将扫描仪声明移到while循环外,并在循环后关闭。不要在循环中关闭
jain
。可能重复@backslax“并在循环后关闭它。”。。这是一个坏建议。@Tom为什么?如果程序就是那个循环,扫描仪应该在循环结束后立即关闭。更一般地说,在应用程序终止之前应该关闭扫描仪,这适用于涉及流的所有内容。你可能会争辩说它不是你创造的,所以你不应该关闭它——好吧,这是一个选择的问题。如果你不再需要它了,关闭它也很好。非常感谢,我的想法更像是“如果它关闭了,你必须通过每次跑步来更新”。