程序显示控制台菜单,您可以选择内容,直到选择 (0) 并退出程序。
首先,程序按预期运行,我可以选择一个选项并调用 addPersonMenu()
或 deletePersonMenu()
。在 showMainMenu()
中执行每个操作后,菜单应在控制台上重建,以便在 main 方法中再次调用 showMainMenu()
方法。但这一次它将抛出一个IOException: Stream closeed
并退出。
Eclipse 中的 Debug模式显示 try-with-ressources
block 无法打开新的 BufferedReader
,尽管它应该正确关闭并且应该释放资源.
有什么想法吗?
public static void main(String[] args) {
while(!exit) {
showMainMenu()
}
}
private static void showMainMenu() {
System.out.println("(1) Add new person");
System.out.println("(2) Edit existing person");
System.out.println("(3) Delete person");
System.out.println();
System.out.println("(5) Save changes");
System.out.println("(0) Exit without saving");
try (BufferedReader br = new BufferedReader(new InputStreamReader(
System.in))) {
switch (Integer.parseInt(br.readLine())) {
case (1):
addPersonMenu();
break;
case (2):
// editPersonMenu();
break;
case (3):
deletePersonMenu();
break;
case (5):
// saveChanges();
break;
case (0):
exit();
break;
default:
System.out.println("Invalid input! Repeat!");
}
} catch (IOException e) {
e.printStackTrace();
exit = true;
}
}
最佳答案
这是正常的:您在方法中关闭了 System.in
。
你应该做的是这样的:
try (
// open the resource here
) {
String line;
while ((line = reader.readLine()) != null)
showMainMenu(line);
}
尤其是每次重新打开阅读器都是浪费。
关于java - try-with-ressources 在创建并关闭之前无法创建新的 BufferedWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30156164/