有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在创建新的BufferedReader后,当流关闭时,从BufferedReader读取java会引发异常

下面是一个从用户那里获取输入并返回响应的方法

private String getValueFromUser(String propertyValue){
    String response = ""; 
    try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))){
        response = br.readLine();
        if (response.equals("")){
            return propertyValue;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return response;
}

此方法在第一次调用执行时运行良好,但在后续调用中引发以下异常

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 java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at com.ripple.utility.ConfigurationUtility.getValueFromUser(ConfigurationUtility.java:119)
at com.ripple.utility.ConfigurationUtility.createPropertiesDTO(ConfigurationUtility.java:108)
at com.ripple.utility.ConfigurationUtility.setProperties(ConfigurationUtility.java:169)
at com.ripple.utility.ConfigurationUtility.main(ConfigurationUtility.java:191)

有人能帮我解释一下代码的问题吗


共 (1) 个答案

  1. # 1 楼答案

    BufferedReader在try with resources块结束时关闭时,System.in也会关闭,无法重新打开

    你应该打开读卡器一次,并把它放在可以使用的地方,直到你的程序完成