Java 在Scanner.hasNext()之后

Java 在Scanner.hasNext()之后,java,java.util.scanner,Java,Java.util.scanner,我不知道这是否是一个noob问题,但在我的代码中: void process() { ... while (input.hasNext()) { \\ DO WHATEVERITNEEDSTODO } out.close(); ... } 它执行while语句中的所有操作,但之后它不会继续,因此不会关闭。即使我将System.out.println(“Hello Hello”)而不是out.close()作为一个简单的检查,它也不会打印“Hello

我不知道这是否是一个noob问题,但在我的代码中:

void process() {
   ...
   while (input.hasNext()) {
       \\ DO WHATEVERITNEEDSTODO
   }
   out.close();
   ...
}
它执行while语句中的所有操作,但之后它不会继续,因此不会关闭。即使我将System.out.println(“Hello Hello”)而不是out.close()作为一个简单的检查,它也不会打印“Hello Hello”

我基本上是想让out.close()在输入完成所有操作后发生。还有其他方法可以做到这一点吗?

Per,“此方法可能会在等待输入扫描时阻塞。”我猜您正在对某种永远不会结束的输入(例如System.in?)运行扫描仪。因此,您会看到循环的主体正在执行,但最终,要处理的内容将用尽,它将永远挂起,等待是否有“下一个”


换一种说法,仅仅因为目前没有任何东西可以从扫描器的底层流中读取,并不意味着永远不会有。只要流保持打开状态,最终可能会有更多内容可供阅读。

我们需要查看
中的代码在
输入时做了什么。hasNext()
是否返回false?如果没有,它将永远留在循环中。请显示“input.hasNext()”的代码。您的扫描仪从什么资源读取?系统在
或@Scott你知道海报上说的是库函数
Scanner#hasNext()
,对吗?