24

我刚刚开始学习 Groovy,并且正在尝试使用 GroovyConsole。

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

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

打印“输入:”

输入 = 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() 为空,您可以

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