BufferedReader.readLine使用sbt run或sbt console的问题

jro*_*sch 6 io scala sbt read-eval-print-loop

我的问题很快我正在一个小型控制台上读取输入然后调用相应的代码.我正在使用sbt,我遇到了一个问题,当我尝试使用sbt run,sbt控制台,或者甚至是普通的旧scala解释器运行我的程序后读取输入.

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

import java.io._

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

val line = s.readLine

println(line)
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*777 -1

这实际上是一个 Java API 问题,尽管是在 Scala 中。BufferedReader.readLine() 将消耗您从 System.in 键入的所有字符,直到它有一整行,此时它将返回您所说的行。

在 Java 中,使用原始的 java.io 类进行控制台输入很困难。在 Java6 之前,我见过一些混乱的解决方案,但幸运的是,该版本引入了一个新类,使其变得更加容易:java.io.Console。我认为事情就变得简单了

val line = System.console.readLine

println(line)
Run Code Online (Sandbox Code Playgroud)

  • 当我尝试从 sbt 中运行代码时,出现空指针异常。具体来说,“console”为空。 (3认同)