读取文件,将内容存储到对象,在ArrayList中存储对象会导致java.lang.NullPointerException

时间:2014-08-05 01:15:49

标签: java nullpointerexception

我发现我的代码有什么问题,我遇到了一些麻烦。我一直在忙着用NullPointerExceptions读取其他主题,并试图通过使用调试器找到它,我找不到一个好的视频来告诉我如何使用调试器,所以我有点无法弄明白。

我正在使用Netbeans,这是从错误输出中取出的:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at tibianic.spy.system.FileHandler.addVipToList(FileHandler.java:81)
at tibianic.spy.system.FileHandler.loadVipList(FileHandler.java:65)
at tibianic.spy.system.FileHandler.<init>(FileHandler.java:27)

我假设问题位于FileHandler类 - loadVipList / addVipToList方法中。

班级:

package spy.system;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author unknown
*/
public class FileHandler {
ArrayList<Vip> vip;

public FileHandler() {
    this.loadVipList();
}

public void setVipList(ArrayList<Vip> newList) {
    this.vip = newList;
}

public ArrayList<Vip> getVipList() {
    return this.vip;
}

public void saveVipList() {
    String line;
    try {
        FileWriter fWriter = new FileWriter("vip.txt");
        BufferedWriter bWriter = new BufferedWriter(fWriter);

        for (Vip v : vip) {
            line = v.getName() + ":" + v.getNote();
            bWriter.write(line);
        }

        bWriter.close();
        fWriter.close();
    } catch (IOException ex) {
        Logger.getLogger(FileHandler.class.getName()).log(Level.SEVERE, null, ex);
    }
}

public void loadVipList() {
    String line;
    String[] person;
    try {
        FileReader fReader = new FileReader("vip.txt");
        BufferedReader bReader = new BufferedReader(fReader);

        while ((line = bReader.readLine()) != null) {
            person = line.split(":");
            addVipToList(person[0],person[1]);
        }

        bReader.close();
        fReader.close();

    } catch (FileNotFoundException ex) {
        Logger.getLogger(FileHandler.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(FileHandler.class.getName()).log(Level.SEVERE, null, ex);
    }

}

private void addVipToList(String name, String note) {
    Vip guy = new Vip(name,note);
    vip.add(guy);
}

}

据我所知,当我向一个方法提供一个值为null的对象时,会出现NullPointerException,是吗?我认为我发现有一个非常小的错误,因为我真的不知道错误信息试图告诉我什么 -

我确实删除了标题注释,因此这些行可能不准确。

提前致谢

4 个答案:

答案 0 :(得分:3)

您的例外情况表明您的错误位于tibianic.spy.system.FileHandler.addVipToList(FileHandler.java:81)

并根据您的代码,它将在以下方法中抛出。

private void addVipToList(String name, String note) {
    Vip guy = new Vip(name,note);
    vip.add(guy);
}

请注意,您有

public void setVipList(ArrayList<Vip> newList) {
    this.vip = newList;
}

在调用addVipToList()之前,首先需要调用setVipList(),因为没有它,列表vip仍然是null

答案 1 :(得分:0)

我认为问题在于你从未初步化过arylylist。

ArrayList<Vip> vip = new ArrayList<Vip>

答案 2 :(得分:0)

我没有调用setVipList()而我不想调用它 - 还在改变

public class FileHandler {
ArrayList<Vip> vip;

public class FileHandler {
ArrayList<Vip> vip = new ArrayList<>();

解决了这个问题,我知道这很容易 - 太尴尬了。

好的,谢谢大家的快速反应。

答案 3 :(得分:0)

这个班似乎有问题:

当你新建一个实例时,它将调用方法this.loadVipList();

public FileHandler() {
this.loadVipList();
}

但是vip为null;

ArrayList<Vip> vip;

所以你最好这样写:

ArrayList<Vip> vip = new ArrayList<Vip>();

List<Vip> vip = new ArrayList<Vip>();

没关系!