2012-03-13 75 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