2012-04-17 20 views
17

Sto appena iniziando a imparare Groovy e sto sperimentando in GroovyConsole.Groovy Console read input

C'è un modo per leggere l'input dell'utente? Ho provato il codice qui sotto ma ottengo un errore.

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

print "Input:" 

input = br.readLine() 

println "You entered: $input"

Questo è l'errore che sto ricevendo:

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

WARNING: Sanitizing stacktrace: 

java.io.IOException: Stream closed

C'è qualcosa che ho bisogno di importare?

Qualsiasi aiuto sarebbe fantastico.

Grazie

+0

Quando si verifica questo errore? Come hai iniziato 'groovyConsole'? – paislee

+0

Questo errore si verifica quando eseguo lo script da GroovyConsole. Ho appena avviato GroovyConsole con la scorciatoia "Start GroovyConsole". – James

+0

Non riesco a riprodurre. Prova a correre dal terminale, ad es. '> groovyConsole' quindi l'input standard viene ricevuto attraverso il terminale. Questo potrebbe essere utile per te http://groovy.329449.n5.nabble.com/Input-from-GroovyConsole-td342416.html. – paislee

risposta

10

Il codice funziona.

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

Supponendo che sei su Windows, l'unico problema è che l'ingresso viene letto dalla console in background che viene lanciato prima groovyconsole. enter image description here

+0

Funziona anche su linux :) – MariuszS

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

Questo è molto bello e succint, come si ottiene il valore "ok/annulla"? Non importa, capito ... restituisce null se premi Annulla. Grazie! –

28

sono arrivato qui cercando di scoprire il modo più semplice per leggere l'input dell'utente da linea di comando ... ho trovato la risposta elsewhere, pubblicheremo qui per documentare il modo in Groovy 'reale' come è ancora manca:

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

Come dice Larry battaglia, se si utilizza la console di Groovy, assicuratevi di guardare il fondo 'nero' finestra per l'uscita e al tipo di input.

EDIT

In un ambiente in cui Console non è disponibile, come la corsa presso il vostro IDE, probabilmente, utilizzare questo invece:

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

Si potrebbe provare qualcosa di simile, che funziona a la riga di comando di qualsiasi o/s, ma anche nella GoovyConsole - dove viene visualizzata una finestra di dialogo [come indicato in un precedente post]:

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

dolce !! Non l'ho provato (per farlo ..) ma evviva se funziona! –

2

se il proprio System.console() è nullo, è possibile

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