2012-04-17 23 views
17

私はGroovyを学び始めました。私はGroovyConsoleで試しています。Groovyコンソールの読み込み入力

ユーザー入力を読み取る方法はありますか?以下のコードを試しましたが、エラーが発生します。

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

print "Input:" 

input = br.readLine() 

println "You entered: $input"

これは私が受けていますエラーです:

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

WARNING: Sanitizing stacktrace: 

java.io.IOException: Stream closed

私はインポートする必要があるものがありますか?

助けがあれば助かります。

ありがとうございました

+0

いつこのエラーが発生しますか?あなたは 'groovyConsole'をどうやって始めましたか? – paislee

+0

このエラーは、GroovyConsoleからスクリプトを実行したときに発生します。 「GroovyConsoleの開始」ショートカットを使用してGroovyConsoleを開始しました。 – James

+0

私は再現できません。ターミナルから走ってみてください。 '> groovyConsole'を実行すると、端末から標準入力が受信されます。これは、あなたにとって有用かもしれません。http://groovy.329449.n5.nabble.com/Input-from-GroovyConsole-td342416.html。 – paislee

答えて

10

あなたのコードが動作します。あなたは窓にしていると仮定すると、

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

、唯一の問題は、入力がgroovyコンソールの前に起動され、バックグラウンドでコンソールから読み込まれているということです。 enter image description here

+0

これはLinuxでも動作します:) – MariuszS

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

これは非常にクールでsuccintですが、どのように「ok/cancel」値を取得しますか? Nevemindは、それを持っています。ありがとう! –

28

私は、コマンドラインからのユーザ入力を読み込むための最も簡単な方法を見つけるためにしようとここに来た...私は答えelsewhereを見つけた 、それはだとして、「本当の」Groovyの方法を文書化するためにここに掲載します行方不明:

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

ラリーバトルが言うように、グルーヴィーコンソールを使用している場合は、出力のための背景「黒」ウィンドウを見てと入力を入力することを確認してください。

Consoleは、お使いのIDEから実行しているとして、利用できない環境ではEDIT

、おそらく、代わりにこれを使用する:あなたはで働いて、このような何かを、試みることができる

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

任意のo/sのコマンドラインだけでなくGoovyConsoleでも - [前の投稿に記載されているように]ダイアログをポップアップさせます:

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

甘い!それを試していない(約..)が動作したらうれしい! –

2

System.console()がnullの場合、

Scanner scan = new Scanner(System.in); 
String s = scan.nextLine() 
関連する問題