24

私は Groovy を学び始めたばかりで、GroovyConsole で実験しています。

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

BufferedReader br = 新しい BufferedReader(新しい InputStreamReader(System.in))

print "入力:"

入力 = br.readLine()

println "入力しました: $input"

これは私が受け取っているエラーです:

例外がスローされました
2012 年 4 月 17 日 02:52:39 org.codehaus.groovy.runtime.StackTraceUtils サニタイズ

警告: スタックトレースのサニタイズ:

java.io.IOException: ストリームが閉じられました

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

どんな助けでも素晴らしいでしょう。

ありがとう

4

5 に答える 5

44

コマンドラインからユーザー入力を読み取る最も簡単な方法を見つけようとしてここに来ました...他の場所で答えを見つけました。まだ欠落しているため、「実際の」Groovyの方法を文書化するためにここに投稿します。

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

Larry Battleが言うように、Groovyコンソールを使用している場合は、出力の背景の「黒い」ウィンドウを確認し、入力を入力してください。

編集

IDEから実行するなど、コンソールを使用できない環境では、代わりに次の方法を使用してください。

println "What is your name?"
println "Your name is ${System.in.newReader().readLine()}"
于 2013-03-06T21:43:10.220 に答える
25
def readln = javax.swing.JOptionPane.&showInputDialog
def username = readln 'What is your name?'
println "Hello $username."
于 2012-12-20T17:31:38.807 に答える
12

あなたのコードは機能します。

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

あなたがWindowsを使用していると仮定すると、唯一の問題は、groovyconsoleの前に起動されるバックグラウンドでコンソールから入力が読み取られることです。 ここに画像の説明を入力

于 2012-04-30T18:18:40.110 に答える
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!...
于 2013-06-10T12:28:15.753 に答える
2

System.console() がnullの場合、次のことができます

Scanner scan = new Scanner(System.in);
String s = scan.nextLine()
于 2016-04-21T16:31:25.147 に答える