【问题标题】:BufferedReader with new InputStreamReader(System.in) throws an exception Temporarily unavailable resource带有新 InputStreamReader(System.in) 的 BufferedReader 抛出异常 资源暂时不可用
【发布时间】:2020-11-11 06:03:47
【问题描述】:

在我的独立应用程序中,我必须从不同类的控制台读取用户输入。 我在 Installer 类中创建了一个静态类成员变量

public static final BufferedReader buffReader = new BufferedReader(new InputStreamReader(System.in));

但是 Installer.buffReader.readLine();抛出 IO 异常 - “暂时不可用的资源” 有时

public static void startApplication() {
        System.out.println("Would you like to start the application? [y/n]");
        String userChoice = null;
        try {
            userChoice = Installer.buffReader.readLine();
            if (userChoice != null && userChoice.equalsIgnoreCase("y")) {
                start();
            }
        } catch (IOException ex) {
            LOGGER.error("Exception occured in startApplication() :{}", ex.getMessage());
        }
    }

如何调试或防止它?

【问题讨论】:

  • 问题不在new InputStreamReader(...),而在readLine()

标签: java io bufferedreader inputstreamreader system.in


【解决方案1】:

我认为是因为您在这里调用相同的方法:

if (userChoice != null && userChoice.equalsIgnoreCase("y")) {
            startApplication();
        }

所以第二次调用该方法时会抛出异常,因为 bufferedReader 仍处于打开状态。

在使用 buffReader.close() 之前尝试关闭 bufferedReader。或者不要为 BufferedReader 使用静态,因为如果应用程序的其他部分正在使用它,您也会遇到异常。

编辑:

我在谷歌上搜索了一下,可能是因为您的操作系统因任何原因阻止了输入。我试过你的代码,对我来说没有失败。检查这里是一个类似的案例:Link

【讨论】:

  • 我更正了它不是递归调用的代码!。
  • 用 InputStreamReader(System.in) 关闭一个 buffReader 会造成很多麻烦,所以我将其设为静态并在执行结束时关闭它。
  • 如果他关闭了BufferedReader,他也会关闭System.in,它无法重新打开。不是个好主意。
  • 如果遇到同样的问题,请尝试使用类 Scanner
猜你喜欢
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 2021-06-05
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
相关资源
最近更新 更多