下面是我创建的一些示例代码,以使自己更熟悉Groovy。我对Java有很好的理解,现在我正在努力学习这门新语言。
class Activity {
static void reverseString() {
def text
System.in.withReader{
println "Enter a string to be reversed:"
text = it.readLine()
}
print "n";
for (int i = text.length() - 1; i >= 0; i--){
print text[i];
}
}
static void main(String[] args) {
def selection
System.in.withReader{
println "Select a project:"
println "1 - Reverse String"
selection = it.readLine()
}
switch (selection) {
case "1":
reverseString()
break
}
}
}
我能够编译和运行这段代码。我可以输入'1'并按enter键,然后显示我的方法的提示。此时,我应该输入一个字符串来反转,但在我可以输入之前,我得到IO异常:
线程"main"java.io.IOException: Stream closed
java.io.BufferedInputStream.getBufIfOpen (BufferedInputStream.java: 170)
java.io.BufferedInputStream.read (BufferedInputStream.java: 336)
sun.nio.cs.StreamDecoder.readBytes (StreamDecoder.java: 284)
sun.nio.cs.StreamDecoder.implRead (StreamDecoder.java: 326)
sun.nio.cs.StreamDecoder.read (StreamDecoder.java: 178)
sun.nio.cs.StreamDecoder.read0 (StreamDecoder.java: 127)
sun.nio.cs.StreamDecoder.read (StreamDecoder.java: 112)
java.io.InputStreamReader.read (InputStreamReader.java: 168)
活动_reverseString_closure1.doCall美元(main.groovy: 10)
Activity.reverseString (main.groovy: 7)
Activity.main (main.groovy: 39)
我在这里错过了什么?
withReader()
的目的是确保流是关闭的。因此,在main()
方法中输入项目选择后,流程关闭。当reverseString()
被执行时,为时已晚;流已关闭
不要关闭System.in
(直接关闭,或通过withReader
关闭)。只关闭代码创建的流,不关闭应用程序从调用者接收到的流,也不关闭运行时中的全局实例。