2012-04-17 19 views
17

Estoy empezando a aprender Groovy y estoy experimentando en GroovyConsole.Entrada de lectura de la consola Groovy

¿Hay alguna manera de que pueda leer la entrada del usuario? He intentado el código a continuación, pero me sale un error.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) 

print "Input:" 

input = br.readLine() 

println "You entered: $input"

Este es el error que estoy recibiendo:

Exception thrown 
17-Apr-2012 02:52:39 org.codehaus.groovy.runtime.StackTraceUtils sanitize 

WARNING: Sanitizing stacktrace: 

java.io.IOException: Stream closed

¿Hay algo que necesito para importar?

Cualquier ayuda sería genial.

Gracias

+0

¿Cuándo se produce este error? ¿Cómo comenzaste 'groovyConsole'? – paislee

+0

Este error se produce cuando ejecuto el script desde GroovyConsole. Acabo de iniciar GroovyConsole con el atajo 'Iniciar GroovyConsole'. – James

+0

No me puedo reproducir. Intenta ejecutar desde la terminal, p. '> groovyConsole' luego la entrada estándar se recibe a través del terminal. Esto podría ser útil para usted http://groovy.329449.n5.nabble.com/Input-from-GroovyConsole-td342416.html. – paislee

Respuesta

10

Tu código funciona.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) 
print "Input:" 
def userInput = br.readLine() 
println "You entered: $userInput" 

Suponiendo que estés en las ventanas, el único problema es que la entrada se lee desde la consola en el fondo que se puso en marcha antes de groovyconsole. enter image description here

+0

Esto también funciona en Linux :) – MariuszS

19
def readln = javax.swing.JOptionPane.&showInputDialog 
def username = readln 'What is your name?' 
println "Hello $username." 
+1

Esto es muy bueno y sucinto, ¿cómo se obtiene el valor "ok/cancel"? Nevemind, lo tengo ... devuelve nulo si presionas cancelar. ¡Gracias! –

28

llegué aquí tratando de encontrar la manera más fácil de leer la entrada del usuario desde la línea de comandos ... he encontrado la respuesta elsewhere, expondremos aquí para documentar la forma maravillosa 'real', ya que es todavía faltan:

def username = System.console().readLine 'What is your name?' 
println "Hello $username" 

Como dice Larry batalla, si se utiliza la consola maravilloso, asegúrese de buscar en el fondo 'negro' ventana para la salida y al tipo de entrada.

EDITAR

En un entorno donde Console no está disponible, como correr en su IDE, probablemente, utilizar esto en su lugar:

println "What is your name?" 
println "Your name is ${System.in.newReader().readLine()}" 
3

Usted podría intentar algo como esto, que trabaja en la línea de comandos de cualquier o/s, pero también en GoovyConsole, donde aparece un cuadro de diálogo [como se señaló en una publicación anterior]:

def cons = System.console() 
def yn 
if (cons) { 
    yn = {((cons.readLine(it + " (y/n) ")?:"n").trim()?:"n")?.charAt(0).toLowerCase().toString() } 
} else { 
    cons = javax.swing.JOptionPane.&showInputDialog 
    yn = {((cons(it + " (y/n) ")?:"n").trim()?:"n")?.charAt(0).toLowerCase().toString() } 
} 
if (yn("Did you want to do something?") == 'y') 
    ...do something here!... 
+0

dulce !! No lo he probado (a punto de ...) ¡pero aplausos si funciona! –

2

si su System.console() es nulo, puede

Scanner scan = new Scanner(System.in); 
String s = scan.nextLine() 
Cuestiones relacionadas