2012-04-17 16 views
17

Ich fange gerade an, Groovy zu lernen, und ich experimentiere in GroovyConsole.Groovy Konsole lesen Eingang

Gibt es eine Möglichkeit, Benutzereingaben zu lesen? Ich habe den folgenden Code ausprobiert, bekomme aber einen Fehler.

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

print "Input:" 

input = br.readLine() 

println "You entered: $input"

Dies ist der Fehler Ich erhalte:

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

WARNING: Sanitizing stacktrace: 

java.io.IOException: Stream closed

Gibt es etwas, ich importieren müssen?

Jede Hilfe wäre großartig.

Danke

+0

Wann tritt dieser Fehler auf? Wie hast du 'groovyConsole' gestartet? – paislee

+0

Dieser Fehler tritt auf, wenn ich das Skript von GroovyConsole aus führe. Ich habe gerade GroovyConsole mit der Verknüpfung 'GroovyConsole starten' gestartet. – James

+0

Ich kann nicht reproduzieren. Versuchen Sie, vom Terminal aus zu laufen, z.B. '> groovyConsole' dann wird die Standardeingabe über das Terminal empfangen. Dies könnte für Sie von Nutzen sein http://groovy.329449.n5.nabble.com/Input-from-GroovyConsole-td342416.html. – paislee

Antwort

10

Ihr Code funktioniert.

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

Angenommen, Sie auf Fenstern sind, dann ist das einzige Problem, dass die Eingabe von der Konsole im Hintergrund gelesen wird, die vor groovyconsole gestartet wird. enter image description here

+0

Das funktioniert auch unter Linux :) – MariuszS

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

Das ist sehr cool und succint, wie bekommt man den "ok/cancel" Wert? Nevemind, hab es ... es gibt null zurück, wenn du cancel drückst. Vielen Dank! –

28

Ich habe hier versucht, die einfachste Weg, um herauszufinden, eine Benutzereingabe über die Kommandozeile zu lesen ... ich die Antwort elsewhere gefunden wird, wird hier posten die ‚echte‘ Groovy Art und Weise zu dokumentieren, wie es ist noch fehlt:

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

Als Larry Schlacht sagt, wenn die groovy Konsole verwenden, stellen Sie sicher, dass im Hintergrund ‚schwarz‘ Fenster für die Ausgabe suchen und Eingabe einzugeben.

EDIT

In einer Umgebung, in Console nicht zur Verfügung, wie zum Beispiel Laufen von Ihrem IDE ist, wahrscheinlich, verwenden Sie stattdessen:

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

Sie so etwas wie dies versuchen könnte, die am Werk die Befehlszeile von jedem o/s, aber auch in der GoovyConsole - wo es einen Dialog öffnet [wie in einem früheren Post]:

+0

süß !! Habe es noch nicht ausprobiert (etwa zu ..) aber prost wenn es klappt! –

2

Wenn Ihre System.console() null ist, können Sie

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