Groovy控制台读取输入

时间:2012-04-17 01:57:42

标签: groovy input groovy-console

我刚开始学习Groovy,我正在GroovyConsole中进行实验。

有没有办法可以阅读用户输入?我已经尝试过下面的代码,但是我收到了错误。

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

我需要导入什么吗?

任何帮助都会很棒。

由于

5 个答案:

答案 0 :(得分:33)

我到这里试图找出从命令行读取用户输入的最简单方法... 我找到了答案elsewhere,将在此处发布以记录“真正的”Groovy方式,因为它仍然缺失:

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

正如Larry Battle所说,如果使用groovy控制台,请务必查看输出的背景“黑色”窗口并输入输入。

修改

Console不可用的环境中,例如从IDE运行,可能请改用:

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

答案 1 :(得分:22)

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

答案 2 :(得分:11)

您的代码有效。

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

假设你在Windows上,唯一的问题是在groovyconsole之前启动的后台控制台正在读取输入。 enter image description here

答案 3 :(得分: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!...

答案 4 :(得分:2)

如果您的System.console()为null,则可以

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