我通过创建客户类的对象从“main”调用 name_setter() 方法,以从控制台获取输入并将输入的名称存储在客户类对象的“name”变量中。
import java.io.*;
public class Rental {
public static void main(String[] args) {
customer c = new customer();
c.name_setter(); // calls the method from customer class
}
}
class customer {
String name;
String name_setter() {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("Enter the name:"); // executes till here
name = br.readLine(); // stream close error
System.out.println(name);
if (name.length() == 0) {
name = br.readLine();
}
} catch (IOException e) {
System.out.println("" + e);
}
return name;
}
}
我收到的错误是:
java.io.IOException: Stream closed
最佳答案
正如 Hovercraft Full Of Eels 所说,这段代码在运行时不会引起问题。
它可能与引发异常的人不同:java.io.IOException:流已关闭
。
注意:您将 BufferedReader
与 System.in
InputStream
链接起来。
当您关闭 BufferedReader
时,它也会关闭 System.in
。
例如,在此代码末尾,System.in
已关闭:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br.close();
br = new BufferedReader(new InputStreamReader(System.in));
如果您想在 System.in
中再次读取,则不应关闭 BufferedReader
。
通过推论,我认为问题就出在于此。
您对 Scanner 实例也有同样的问题。
关于java - IOException:从java中的控制台读取时出现流关闭错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41314010/