Проблема с BufferedReader.readLine при использовании sbt run или sbt console - PullRequest
6 голосов
/ 13 марта 2012

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

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

import java.io._

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

val line = s.readLine

println(line)

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

1 Ответ

0 голосов
/ 09 июня 2012

Это действительно вопрос API Java, хотя и в Scala.BufferedReader.readLine () будет потреблять все символы, которые вы вводите из System.in, до тех пор, пока он не будет иметь целую строку, и тогда он вернет строку, как вы сказали.классы java.io.До Java6 я видел несколько грязных решений для этого, но, к счастью, в этом выпуске появился новый класс, чтобы сделать его намного проще: java.io.Console .Я думаю, что тогда становится так просто, как

val line = System.console.readLine

println(line)
...