2012-03-13 2 views
6

Мой вопрос быстро Я работаю на небольшой консоли для чтения ввода, а затем вызова соответствующего кода. Я использую sbt, и я столкнулся с проблемой, когда при попытке прочитать ввод после запуска моей программы с запуском sbt, внутри консоли sbt или даже в обычном старом интерпретаторе scala.Проблема с BufferedReader.readLine с помощью sbt run или sbt console

Появляется приглашение просто висеть, но если я нажму на него, он действительно прочитает вход. Хотя буфер оболочки остается пустым. Вот общий код, который я пробовал, который дал мне эту проблему.

import java.io._ 

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

val line = s.readLine 

println(line) 

Кто-нибудь знает, почему это так, и если да, то есть способ исправить это? Я хотел бы видеть, что я набираю, когда запускаю свою программу из sbt. Не видя, как я набираю текст в оболочке, он делает тестирование и разработку моего проекта намного менее приятным.

ответ

-1

Это действительно вопрос Java API, хотя в Scala. BufferedReader.readLine() будет использовать все символы, которые вы вводите из System.in, пока не будет выделена целая строка, и в это время она вернет строку, как вы сказали.

Вход в консоль был сложным на Java с исходными классами java.io. До появления Java6 я видел пару бесполезных решений, но, к счастью, новый класс был представлен с этой версией, чтобы сделать его намного проще: java.io.Console. Я думаю, что тогда становится так же просто, как

val line = System.console.readLine 

println(line) 
+1

Я получаю исключение нулевого указателя, когда пытаюсь запустить код из sbt. В частности, 'console' имеет значение NULL. – dsg

Смежные вопросы