2012-03-13 30 views
6

Mi pregunta es rápida. Estoy trabajando en una pequeña consola para leer la entrada y luego llamar al código correspondiente. Estoy usando sbt y me he encontrado con un problema en el que cuando intento leer la entrada después de ejecutar mi programa con sbt run, dentro de la consola de sbt o incluso en el viejo y simple intérprete de scala.Problema con BufferedReader.readLine con sbt run o sbt console

Parece que el aviso simplemente se cuelga, pero si presiono regresar, en realidad lee la entrada. Aunque el búfer del shell permanece vacío. Aquí está el código general que he estado intentando que me ha estado dando el problema.

import java.io._ 

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

val line = s.readLine 

println(line) 

¿Alguien sabe por qué es esto y, de ser así, hay una forma de solucionarlo? Me encantaría poder ver lo que escribo cuando ejecuto mi programa desde sbt. Sin ver mi tipeo en el caparazón, las pruebas y el desarrollo de mi proyecto son mucho menos agradables.

Respuesta

-1

Esto es realmente una pregunta de Java API, aunque en Scala. BufferedReader.readLine() consumirá todos los caracteres que escriba desde System.in hasta que tenga una línea completa, y en ese momento devolverá la línea como dijo.

La entrada de consola fue difícil en Java con las clases java.io originales. Antes de Java6, he visto un par de soluciones complicadas para esto, pero afortunadamente se introdujo una nueva clase con esa versión para que sea mucho más fácil: java.io.Console. Creo que se vuelve tan simple como

val line = System.console.readLine 

println(line) 
+1

Obtengo una excepción de puntero nulo cuando intento ejecutar el código desde sbt. Específicamente, la 'consola' es nula. – dsg