我发现我的代码有什么问题,我遇到了一些麻烦。我一直在忙着用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,是吗?我认为我发现有一个非常小的错误,因为我真的不知道错误信息试图告诉我什么 -
我确实删除了标题注释,因此这些行可能不准确。
提前致谢
答案 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>();
没关系!