有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

该死的java。lang.NullPointerException

我的应用程序旨在逐行将1500个项目的现有文本文件读取到一个项目类对象数组中。目标是将数据放入阵列中,以便我可以使用此应用程序作为转换我正在编写的新程序的归档文件的起点

package sandboxPackage;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class mainClass {
    public static void main(String[]args) throws FileNotFoundException, IOException {
    InputStream in = new FileInputStream(new File("C:\\Documents and Settings\\Adam\\Desktop\\Cloud Project\\MasterIndex.library"));
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    StringBuilder out = new StringBuilder();
    String line;
    itemClass[] m = new itemClass[1500];
    int i = 0;
    while ((line = reader.readLine()) != null) {
        m[i].index = line;       // crash is here
        m[i].location = reader.readLine();
        m[i].item = reader.readLine();
        m[i].description = reader.readLine();
        i++;
    }

    //Print the entire list
    for (i = 0; i == 1499; i++) {
        System.out.println(m[i].index);
        System.out.println(m[i].location);
        System.out.println(m[i].item);
        System.out.println(m[i].description);
        //System.out.println("This is item #" + i + 1);
    }

    }
}

下面是itemClass:

package sandboxPackage;
public class itemClass{
    String index;
    String item;
    String description;
    String location;
}

文本文件如下所示: 指数 地方 项目 描述 指数 地方 项目 描述 指数

编译器声称NullPointerException位于第20行,这是while循环的第一行,但我没有看到它。我已经看了一千多个类似错误的例子,但对我来说仍然无法计算


共 (3) 个答案

  1. # 1 楼答案

    对象类型数组中的元素默认为null。在尝试为元素的字段赋值之前,先初始化元素

    while ((line = reader.readLine()) != null) {
        m[i] = new ItemClass();
        ...
    }
    
  2. # 2 楼答案

    初始化itemClass数组是的,但从未用itemClass对象填充它。首先,在分配属性之前,必须创建一个itemClass。试试这个

    while ((line = reader.readLine()) != null) {
        itemClass item = new itemClass();
        item.index = line;
        item.location = reader.readLine();
        item.item = reader.readLine();
        item.description = reader.readLine();
        m[i] = item;
        i++;
    }
    
  3. # 3 楼答案

    您只是在声明一个对象数组:

    itemClass[] m = new itemClass[1500];
    

    但你永远不会实例化这个数组中的对象。因此,访问中的任何实例变量都会抛出NullPointerException

    在循环中添加数组对象的实例化:

    while ((line = reader.readLine()) != null) {
        m[i] =  new itemClass();// change the constructor if u need to 
        m[i].index = line;       // crash is here  : should no more crash      
        m[i].location = reader.readLine();
        m[i].item = reader.readLine();
        m[i].description = reader.readLine();
        i++;
    }