web-dev-qa-db-ja.com

Groovyコンソール読み取り入力

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

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

BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
 
 print "Input:" 
 
 input = br.readLine()
 
 println "入力しました:$ input"

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

スローされた例外。] Java.io.IOException:ストリームが閉じられました

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

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

ありがとう

19
James

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

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

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

[〜#〜] edit [〜#〜]

IDEから実行するなど、 Console が使用できない環境では、代わりにこれを使用してください。

println "What is your name?"
println "Your name is ${System.in.newReader().readLine()}"
35
Renato
def readln = javax.swing.JOptionPane.&showInputDialog
def username = readln 'What is your name?'
println "Hello $username."
23
user1845761

コードが機能します。

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

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

11
Larry Battle

次のようなものを試すことができます。これは、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!...
3
Merlin

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

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