程序顯示控制檯菜單,您可以選擇內容直到您選擇(0)並退出程序。try-with-ressources在創建並關閉之前無法創建新的BufferedWriter
首先,程序按預期運行,我可以選擇一個選項並撥打addPersonMenu()
或deletePersonMenu()
。在showMainMenu()
中的每個操作之後,菜單應該在控制檯上重建,以便在主方法中再次調用showMainMenu()
方法。但這一次它會拋出一個IOException: Stream closed
並退出。
在eclipse中的調試模式顯示try-with-ressources
塊無法打開一個新的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;
}
}
'...雖然它應該被正確關閉和資源應該被釋放。「而這正是發生了什麼。 'BufferedReader',它包裝的'InputStreamReader'和支持它的'System.in'都正確關閉。不幸的是,一旦關閉,System.in就會關閉。 – biziclop