2012-04-17 24 views
17

Właśnie zaczynam uczyć się Groovy i eksperymentuję w GroovyConsole.Wejście odczytu konsoli Groovy

Czy istnieje sposób, w jaki mogę odczytać dane wprowadzane przez użytkownika? Próbowałem kodu poniżej, ale pojawia się błąd.

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

print "Input:" 

input = br.readLine() 

println "You entered: $input"

Jest to błąd otrzymuję:

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

WARNING: Sanitizing stacktrace: 

java.io.IOException: Stream closed

Czy muszę coś importować?

Każda pomoc będzie świetna.

Dzięki

+0

Kiedy pojawia się ten błąd? Jak zacząłeś 'groovyConsole'? – paislee

+0

Ten błąd występuje, gdy uruchamiam skrypt z GroovyConsole. Właśnie uruchomiłem GroovyConsole za pomocą skrótu "Start GroovyConsole". – James

+0

Nie mogę się rozmnażać. Spróbuj uruchomić z terminala, np. '> groovyConsole' następnie standardowe wejście jest odbierane przez terminal. To może być przydatne dla Ciebie http://groovy.329449.n5.nabble.com/Input-from-GroovyConsole-td342416.html. – paislee

Odpowiedz

10

Twój kod działa.

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

Zakładając, że jesteś na oknach, jedynym problemem jest to, że wejście jest odczytywany z konsoli w tle, który jest uruchamiany przed groovyconsole. enter image description here

+0

Działa to również na Linuksie :) – MariuszS

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

To jest bardzo fajne i powolne, w jaki sposób uzyskujesz wartość "ok/cancel"? Nevemind, dostał to ... zwraca null, jeśli naciśniesz anuluj. Dzięki! –

28

mam tutaj próbuje dowiedzieć się, najprostszy sposób na czytanie danych wprowadzanych przez użytkownika z poziomu wiersza poleceń ... Znalazłem odpowiedź elsewhere, będziemy pisać tutaj, aby udokumentować „prawdziwe” Groovy sposób, jak to wciąż brakuje:

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

Jak mówi Larry Battle, jeśli za pomocą konsoli groovy, upewnij się, aby spojrzeć na tle okna „czarny” dla wyjścia i wpisywać dane.

EDIT

W środowisku, w którym Console nie jest dostępny, takich jak uruchomiony z IDE, chyba, użyj zamiast tego:

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

można spróbować czegoś takiego, który działa na z wiersza poleceń dowolnego o/s, ale także w GoovyConsole - gdzie pojawia się okno dialogowe [jak podano w poprzednim wpisie]:

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

słodki !! Nie próbowałem tego (około ..), ale okrzyki, jeśli to działa! –

2

, jeśli system.console() ma wartość null, można

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