为什么我会得到nullpointerexception?

时间:2013-02-21 23:50:36

标签: java nullpointerexception dao bufferedreader

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)“ 但为什么?我不明白?而我的朋友做了完全相同的事情,他的代码也有效...... 这不是所有代码,但我在评论中放置了第50行。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

看起来,您错过了databilar.txt文件,因此newBufferedReader来电会引发IOException。所以它转移到finally块并尝试关闭阅读器,但由于阅读器未被newBufferedReader调用设置,它仍然是null,并且尝试关闭它会抛出NullPointerException }。在finally块中,您需要对其进行测试:

} finally {
    if (reader != null) reader.close();
}

然后它将能够无害地退出最终阻塞并转到外部try块中的IOException捕获器。

但最大的问题是它无法找到该文件。