为什么我得到一个Java IO异常在这个非常简单的代码



下面是我创建的一些示例代码,以使自己更熟悉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关闭)。只关闭代码创建的流,不关闭应用程序从调用者接收到的流,也不关闭运行时中的全局实例。

相关内容

  • 没有找到相关文章

最新更新