java - try-with-ressources 在创建并关闭之前无法创建新的 BufferedWriter

标签 java try-catch bufferedreader

程序显示控制台菜单,您可以选择内容,直到选择 (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/

相关文章:

java - 如何从文件中选择文本

java - 为什么这个可运行程序不更新我的 onDraw?

java - FileReader 与 BufferedReader 或 FileInputStream 组合

java - 我怎样才能在java中写入字节缓冲区?

java - 在UTF-8流中间打开InputStreamReader

java - ObjectInputStream 拖拽程序

sql - TRY/CATCH block 与 SQL 检查

node.js - 为什么由于 Node.js 中的可执行路径无效而导致 try-catch block 无法捕获 child_process 生成异常?

Java 7,尝试资源 : can i omit creating Connection and PreparedStatement?

Java - 无法完成写入文本文件