NullPointerException,同时将对象设置为null数组

时间:2018-10-02 15:23:33

标签: java nullpointerexception

我遇到了NullPointerException,经过研究后我不知道为什么。 错误消息显示为:

java.lang.NullPointerException
    at TextDecoder.readMessagesFromFile(TextDecoder.java:32)
    at TextDecoder.main(TextDecoder.java:54)

我已在第54和32行旁评论。

这是我的构造函数(所有这些方法都来自同一类):

  public TextDecoder() {
        messages = new TextMessage[10];
        msgCount = 0;
      }

我的Main方法如下(我包括类声明):

public class TextDecoder {
public static void main(String[] args) throws Exception {

    if (args.length != 1) {
      System.out.println("There is an incorrect amount of command-line arguments. Command-line Argument length: " + args.length);
      System.exit(1);
    } 
    File msgFile = new File(args[0]);
    if (msgFile == null) {
      System.out.println("File not found.");
      System.exit(1);
    }
    readMessagesFromFile(msgFile); // Line 32
}
}

我的readMessagesFromFile是以下内容:

public static void readMessagesFromFile(File inputMsgFile) throws Exception {

Scanner input = new Scanner(inputMsgFile);

 while (input.hasNextLine()) {

   /* Some code here */
// Recipient and keyPresses are defined in here and are not null

   }
   messages[msgCount] = new TextMessage(recipient, keyPresses); // Line 54
   msgCount++;
 }
 input.close();

1 个答案:

答案 0 :(得分:3)

public TextDecoder() {
    messages = new TextMessage[10];
    msgCount = 0;
  }

这是一个构造函数,由new TextDecoder()调用。

您不会调用它,因此messages不会被初始化。 (但是无论如何,您都不应该在构造函数中设置静态字段。)

readMessagesFromFile方法设置为实例方法(删除static;并创建要在其上调用该方法的TextDecoder实例);或静态初始化状态。