首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >爆破java.lang.NullPointerException

爆破java.lang.NullPointerException
EN

Stack Overflow用户
提问于 2014-07-16 22:08:32
回答 3查看 202关注 0票数 0

我的应用程序的目的是将包含1500项的现有文本文件逐行读取到item类对象数组中。我们的目标是将数据输入数组,这样我就可以使用这个应用程序作为转换我正在编写的新程序的归档文件的起点。

代码语言:javascript
复制
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:

代码语言:javascript
复制
package sandboxPackage;
public class itemClass{
    String index;
    String item;
    String description;
    String location;
}

文本文件如下所示:索引位置项描述索引位置项描述索引。

编译器声称NullPointerException位于第20行,这是while循环的第一行,但我没有看到它。我看了大约1000个同样错误的例子,但它仍然没有为我计算。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-16 22:15:29

您初始化了itemClass的数组yes,但是从来没有用itemClass对象填充它。首先,您必须在分配属性之前创建一个itemClass。尝尝这个。

代码语言:javascript
复制
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++;
}
票数 0
EN

Stack Overflow用户

发布于 2014-07-16 22:10:59

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

代码语言:javascript
复制
itemClass[] m = new itemClass[1500];

但是,您从不实例化此数组中的对象。所以访问其中的任何实例变量都会抛出一个NullPointerException

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

代码语言:javascript
复制
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++;
}
票数 6
EN

Stack Overflow用户

发布于 2014-07-16 22:10:43

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

代码语言:javascript
复制
while ((line = reader.readLine()) != null) {
    m[i] = new ItemClass();
    ...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24791657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档