2012-03-13 9 views
6

La mia domanda è veloce Sto lavorando a una piccola console per leggere l'input e poi chiamare il codice appropriato. Sto usando sbt e ho riscontrato un problema in cui quando provo a leggere l'input dopo aver eseguito il mio programma con sbt run, all'interno della console sbt, o anche nel semplice vecchio interprete scala.Problema con BufferedReader.readLine che utilizza la console sbt run o sbt

Il prompt appare semplicemente in attesa, ma se premo return in realtà legge l'input in. Sebbene il buffer della shell rimanga vuoto. Ecco il codice generale che ho provato e che mi ha dato il problema.

import java.io._ 

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

val line = s.readLine 

println(line) 

Qualcuno sa perché questo è, e se è così c'è un modo per risolvere il problema? Mi piacerebbe essere in grado di vedere cosa scrivo quando eseguo il mio programma da sbt. Senza vedere la mia digitazione nella shell rende molto meno piacevole la verifica e lo sviluppo del mio progetto.

risposta

-1

Questa è davvero una domanda API Java, anche se in Scala. BufferedReader.readLine() consumerà tutti i caratteri digitati da System.in fino a quando non avrà un'intera riga, e in quel momento restituirà la linea come hai detto tu.

L'input della console era difficile in Java con le classi java.io originali. Prima di Java6, ho visto un paio di soluzioni disordinate a questo, ma fortunatamente è stata introdotta una nuova classe con questa versione per renderla molto più semplice: java.io.Console. Penso che diventi così semplice come

+1

Ottengo un'eccezione di puntatore nullo quando provo a eseguire il codice dall'interno di sbt. Nello specifico, 'console' è nullo. – dsg