2012-03-13 3 views
6

제 질문은 간단합니다. 입력을 읽고 적절한 코드를 호출하기 위해 작은 콘솔에서 작업하고 있습니다. 나는 sbt를 사용하고 있는데, sbt를 실행하고, sbt 콘솔 내에서 또는 심지어 평범한 오래된 스칼라 인터프리터에서라도 내 프로그램을 실행 한 후 입력을 읽으려고 할 때 문제가 발생했습니다.sbt 실행 또는 sbt 콘솔을 사용하여 BufferedReader.readLine 문제가 발생했습니다.

프롬프트가 멈추는 것처럼 보이지만 반환되면 실제 입력을 읽습니다. 쉘의 버퍼가 비어 있지만. 여기에 제가 시도해 봤던 일반적인 코드가 있습니다.

import java.io._ 

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

val line = s.readLine 

println(line) 

누군가가 왜 그런지 알고 있습니까? 그렇다면이 문제를 해결할 방법이 있습니까? 나는 sbt에서 내 프로그램을 실행할 때 입력 한 것을 볼 수 있기를 원합니다. 셸에서 타이핑하는 것을 보지 않고서는 프로젝트의 테스트와 개발을 훨씬 즐겁게합니다.

답변

-1

이것은 Scala에서 실제로 Java API 관련 질문입니다. BufferedReader.readLine()은 System.in에서 입력 한 모든 문자를 전체 행이 될 때까지 사용합니다.이 때 전체 행을 반환합니다.

Java에서 원래 java.io 클래스로 콘솔 입력이 어려웠습니다. Java6 이전에는 이것에 대한 몇 가지 지저분한 해결책을 보았습니다. 그러나 다행스럽게도 새로운 클래스가 출시되어 더 쉽게 사용할 수 있습니다 : java.io.Console. 나는 그때 간단하게된다고 생각한다.

val line = System.console.readLine 

println(line) 
+1

sbt에서 코드를 실행할 때 널 포인터 예외가 발생한다. 특히'console'은 null입니다. – dsg