以下是我为了让自己更熟悉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'然后按回车键,然后显示我方法的提示。此时我应该输入一个字符串来反转,但在我输入之前我得到IO异常:
线程“main”中的异常java.io.IOException:Stream closed
at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:170)
at java.io.BufferedInputStream.read(BufferedInputStream.java:336)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at sun.nio.cs.StreamDecoder.read0(StreamDecoder.java:127)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:112)
在java.io.InputStreamReader.read(InputStreamReader.java:168)
在Activity $ _reverseString_closure1.doCall(main.groovy:10)
在Activity.reverseString(main.groovy:7)
在Activity.main(main.groovy:39)
我在这里缺少什么?
答案 0 :(得分:1)
withReader()
的目的是确保关闭流。因此,在main()
方法中输入项目选择后,将关闭流。当reverseString()
被执行时,为时已晚;流已关闭。
请勿关闭System.in
(直接或通过withReader
)。只关闭代码创建的流,而不是应用程序从调用者或运行时中的全局实例接收的流。