在Scanner.hasNext()之后

时间:2013-10-19 00:10:14

标签: java java.util.scanner

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

void process() {
   ...
   while (input.hasNext()) {
       \\ DO WHATEVERITNEEDSTODO
   }
   out.close();
   ...
}

它在while语句中执行所有操作,但之后它不会继续,因此不会关闭。即使我将System.out.println(“Hello hello”)而不是out.close()作为简单检查,它也不会打印“Hello hello”

我基本上试图让out.close()在我的输入完成所有内容之后发生。还有另一种方法吗?

1 个答案:

答案 0 :(得分:0)

Per the docs for hasNext(),“此方法在等待输入扫描时可能会阻塞。”我猜你在某种输入上运行一个永远不会结束的扫描器(比如System.in?)。因此,你会看到循环的主体正在执行,但最终,你没有要处理的东西,它会永远挂起,等待那里成为“下一个”或不是。

换句话说,仅仅因为目前没有任何东西可以从Scanner的底层流中读取,这并不意味着永远不会有。只要流保持打开状态,最终可以读取更多内容。