我刚开始学习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
有什么我需要进口?
任何帮助将是巨大的。
谢谢
我来到这里试图找出读取命令行用户输入的最简单的方法......我找到了答案其他地方 ,将张贴在这里记录,因为它仍然缺少“真正的” Groovy的方式:
def username = System.console().readLine 'What is your name?'
println "Hello $username"
正如拉里·巴特尔说,如果使用的是常规控制台,一定要看看背景“黑”的输出窗口,键入输入。
编辑
在环境控制台不可用,如从你的IDE中运行,很可能,改用这样的:
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()为空,你可以
Scanner scan = new Scanner(System.in);
String s = scan.nextLine()