【发布时间】:2020-10-31 10:55:01
【问题描述】:
我正在使用 BufferedReader 在 for 循环中接收多个输入;但是,当第一次输入时,它会抛出错误
java.io.Exception:流已关闭
尽管我直到 for 循环结束后才关闭它。代码如下:
BufferedReader menu = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; players.length > i; i++) {
System.out.println("Choose the " + i + " player");
System.out.println("1. New Player");
System.out.println("2. Old Player");
int choice2 = Integer.parseInt(menu.readLine());
System.out.println("Which team are you on?");
int playersTeam = Integer.parseInt(menu.readLine());
Person player = new Person();
if (choice2 == 1) {
player.squadFilling();
player.playerNaming();
} else if (choice2 == 2) {
break;
}
}
menu.close();
是什么导致了崩溃,我该如何解决?感谢您的宝贵时间!
堆栈跟踪:
java.io.IOException: Stream closed
at java.base/java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:168)
at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:334)
at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297)
at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188)
at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181)
at java.base/java.io.BufferedReader.fill(BufferedReader.java:161)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392)
at Main.main(Main.java:409)
【问题讨论】:
-
这个错误是在for循环的第一次迭代之后产生的,还是在这段代码已经被调用一次之后的第一次迭代产生的?
-
for循环的第一次迭代。
-
System.in 是否可能在此调用之前已在另一个代码块中关闭?当您关闭使用 System.in 作为 InputStream 的 Reader 时,该 InputStream 也会关闭。这意味着您不能再次使用 System.in,直到它再次被实例化。
-
什么意思?打开新的
System.in不会打开新的 InputStream 吗? -
@FrasherGray - 不是这段代码(您发布的)导致了这种情况。我怀疑您程序的其他部分正在关闭
System.in。如果您已从程序中的每个位置删除了close()语句,则您可能在一些关闭System.in的try-with-resources 代码中使用了System.in。
标签: java bufferedreader java-io