java - 为什么在使用文本输入而不是用户输入时会出现 NullPointerException?

标签 java

所以我必须编写一个程序,它是一个航类预订系统。如果我正常运行程序并在出现提示时输入值,没有任何问题,但是当我使用 .txt 文件输入时,我得到一个 NullPointerException。我得到 NullPointerException 的代码部分是

 public void instantiateAirplane() throws IOException{
        boolean creatingAirplane = true;
        String className= "";
        String seatFormat;
        int rowNums;
        while (creatingAirplane){
            input  = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Enter service class name or [ENTER] to finish: ");

            className = input.readLine();
            if (className.equals("")) {
                creatingAirplane = false;
            }
            else{   
                System.out.println("Enter seating pattern: ");
                seatFormat = input.readLine();
                System.out.println("Enter number of rows: ");
                rowNums = Integer.parseInt(input.readLine());
                plane.creatSeatingChart(className, rowNums, seatFormat);
            }
        }
    }

正常输入时,运行如下:

C:\Users\Owner\Desktop\Math&CIS\CS151\HW1>java UserInterface planes
Enter service class name or [ENTER] to finish:
First Class
Enter seating pattern:
WAAW
Enter number of rows:
2
Enter service class name or [ENTER] to finish:
Business Class
Enter seating pattern:
WAAW
Enter number of rows:
2
Enter service class name or [ENTER] to finish:

Add [P]assenger, Add [G]roup, [C]ancel Reservations, Print [S]eating chart, Prin
t [M]anifest, [Q]uit

但是当使用 .txt 输入时,会发生以下情况

C:\Users\Owner\Desktop\Math&CIS\CS151\HW1>java UserInterface planes < input.txt
Enter service class name or [ENTER] to finish:
Enter seating pattern:
Enter number of rows:
Enter service class name or [ENTER] to finish:
Exception in thread "main" java.lang.NullPointerException
        at UserInterface.instantiateAirplane(UserInterface.java:21)
        at UserInterface.main(UserInterface.java:123)

C:\Users\Owner\Desktop\Math&CIS\CS151\HW1>

异常发生在行 "if (className.equals("")) {"

输入文本如下:

First
WAAW
2
Economy
WCAACW
3

...

我不确定为什么它在使用输入文本时不起作用。

最佳答案

一旦迭代器到达所谓的 EOF 或文件末尾,该 readLine() 方法将返回 null。检查是否 ClassName == null || className.Equal("")...

您可能还想在循环之外声明 input = new BufferedReader(new InputStreamReader(System.in));,这样您就不会在每次循环迭代时都重新初始化读取器。

-!

关于java - 为什么在使用文本输入而不是用户输入时会出现 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7494070/

相关文章:

java - StringBuilder 最有效的初始容量大小?

java - 写入随机访问文件

Java 8 打开 Windows 自定义 csp 提供程序并检索 key

java - JPA:获取引用另一个实体的异常

java - 在 Java 中用数据库中的更正替换部分字符串

java - 在源文件夹 : The import cannot be resolved 中导入

java - 如何在我的 Java Web 应用程序中使用 Google 音译 API?

java - C99 客户端与 Java 服务器通信

java - 将 JButton 添加到 JScrollPane

java - 在不同操作系统中测试java类