Groovy控制台读取输入

24

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

有没有一种方法可以读取用户输入?我尝试了下面的代码,但是出现了错误。

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

print "输入:"
input = br.readLine() println "你输入的是: $input"

我收到的错误如下:

异常抛出
17-Apr-2012 02:52:39 org.codehaus.groovy.runtime.StackTraceUtils sanitize

警告:清理堆栈跟踪:
java.io.IOException: 流已关闭

我需要导入什么吗?

任何帮助都将非常感谢。

谢谢!


这个错误是在什么时候发生的?你是如何启动 groovyConsole 的? - calebds
当我从GroovyConsole运行脚本时,出现了这个错误。我刚刚使用“启动GroovyConsole”快捷方式启动了GroovyConsole。 - James
我无法重现。尝试从终端运行,例如 > groovyConsole,然后标准输入通过终端接收。这可能对您有用 http://groovy.329449.n5.nabble.com/Input-from-GroovyConsole-td342416.html。 - calebds
1
谢谢提供链接。虽然我还有点困惑如何从终端运行脚本?我该如何访问它? - James
5个回答

44
我在这里想要找到从命令行读取用户输入的最简单方法......我在其他地方找到了答案,现在在此记录“真正”的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()}"

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

2
这非常酷且简洁,你如何获取“确定/取消”值?算了,我懂了...如果你点击取消,它会返回null。谢谢! - Bill K
不错。也可以是 import static javax.swing.JOptionPane.showInputDialogdef username = showInputDialog '你叫什么名字?' - Jeremy Hunt

12

你的代码可行。

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
你可以尝试这样做,它适用于任何操作系统的命令行,但也适用于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!...

太好了!还没有尝试过(即将尝试),但如果它有效,那就干杯! - apil.tamang

2
如果您的System.console()为null,您可以:
Scanner scan = new Scanner(System.in);
String s = scan.nextLine()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接