Groovyを学び始めたばかりで、GroovyConsoleで実験しています。
ユーザー入力を読み取る方法はありますか?以下のコードを試しましたが、エラーが発生します。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) print "Input:" input = br.readLine() println "入力しました:$ input"
これは私が受け取っているエラーです:
スローされた例外。] Java.io.IOException:ストリームが閉じられました
インポートする必要があるものはありますか?
どんな助けも素晴らしいでしょう。
ありがとう
コマンドラインからユーザー入力を読み取る最も簡単な方法を見つけようとしてここに来ました...答えが見つかりました 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()}"
def readln = javax.swing.JOptionPane.&showInputDialog
def username = readln 'What is your name?'
println "Hello $username."
コードが機能します。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
print "Input:"
def userInput = br.readLine()
println "You entered: $userInput"
Windowsを使用していると仮定すると、唯一の問題は、groovyconsoleの前に起動されるバックグラウンドでコンソールから入力が読み取られることです。
次のようなものを試すことができます。これは、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!...
system.console()がnullの場合、次のことができます。
Scanner scan = new Scanner(System.in);
String s = scan.nextLine()