2012-03-13 41 views
6

我的问题是快速我正在一个小控制台阅读输入,然后调用适当的代码。我正在使用sbt,而且我遇到了一个问题,当我尝试使用sbt run,sbt控制台或甚至普通的旧scala解释器运行我的程序后读取输入时。使用sbt运行或sbt控制台BufferedReader.readLine问题

该提示似乎只是挂起,但如果我打回来,它实际上是读入输入。虽然shell的缓冲区仍然是空的。这是我一直在尝试的一般代码,一直给我提供这个问题。

import java.io._ 

val s = new BufferedReader(new InputStreamReader(System.in)) 

val line = s.readLine 

println(line) 

有人知道这是为什么,如果是的话有没有办法解决这个问题?我希望能够看到我从sbt运行我的程序时键入的内容。没有看到我在shell中输入的内容,这使得我的项目的测试和开发变得不那么愉快。

回答

-1

这实际上是一个Java API问题,虽然在Scala中。 BufferedReader.readLine()会消耗你从System.in输入的所有字符,直到它有一整行为止,届时它会按照你所说的返回行。

Java原始java.io类中的控制台输入很困难。在Java6之前,我已经看到了一些混乱的解决方案,但幸运的是,在该版本中引入了一个新类,以使其更容易:java.io.Console。我认为它就像

val line = System.console.readLine 

println(line) 
val line = System.console.readLine 

println(line) 
+1

当我尝试从sbt内运行你的代码时,我得到一个空指针异常。具体来说,'console'为空。 – dsg 2012-06-11 08:07:38