class DAOBilTextFile implements DAOBil {
private ArrayList<DTOBil> dtoBilar;
public DTOBil dtobil;
public DAOBilTextFile() {
dtoBilar = new ArrayList<DTOBil>();
Charset charset = Charset.forName("UTF-8");
BufferedReader reader = null;
try {
try{
reader = Files.newBufferedReader(Paths.get("databilar.txt"), charset);
String line = null;
DTOBil bil = null;
while((line = reader.readLine()) != null){
//tar in line och lägger in den i en array med hjälp av ; för att splitta datat
String strBilar[] = line.split(";");
bil = new DTOBil(strBilar[0], strBilar[1], strBilar[2], strBilar[3]);
//lägger till bil i arraylistan
dtoBilar.add(bil);
}reader.close();//this line is the error!
}finally{
reader.close();
}} catch (IOException ioexp) {
System.out.println(ioexp.getMessage());
}
}
@Override
public void create(DTOBil dtobil) {
Charset charset = Charset.forName("UTF-8");
//klasser för att skriva till textfil
BufferedWriter writer = null;
try {
writer = Files.newBufferedWriter(Paths.get("databilar.txt"), charset, StandardOpenOption.APPEND);
writer.write(dtobil.getRegnr() + ";"
+ dtobil.getMarke() + ";"
+ dtobil.getModell() + ";"
+ dtobil.getsokVag());
writer.newLine();
System.out.println("La till en bil");
writer.close();
} catch (IOException ioexp) {
System.out.println(ioexp.getMessage());
}
}
我收到“线程“AWT-EventQueue-0”中的异常”java.lang.NullPointerException 在 swing.labb3.DAOBilTextFile.(DAOBilTextFile.java:50)" 但为什么?我不明白?我的 friend 做了同样的事情,他的代码有效...... 这不是全部代码,但我已将第 50 行放在注释中。
感谢您的帮助!
最佳答案
看来,您缺少 databilar.txt
文件,因此 newBufferedReader
调用会抛出 IOException
。因此它转向finally block 并尝试关闭读取器,但由于读取器不是由newBufferedReader
调用设置的,它仍然是null
,并且尝试关闭它抛出一个NullPointerException
。在finally block 中,您需要对此进行测试:
} finally {
if (reader != null) reader.close();
}
然后它将能够无害地退出该finally block 并到达外部try block 中的IOException捕获器。
但最大的问题是找不到文件。
关于java - 为什么我会得到空指针异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15014442/