java - 为什么我会得到空指针异常?

标签 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)" 但为什么?我不明白?我的 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/

相关文章:

java - 具有依赖关系(外键)的多个 DAO

java - 我如何使用 JUnit 在 DAO 层中激发 SQLExcetpion

java - 应用程序在 Netbeans 中的运行方式有所不同

java - 部署 Web 服务时出现 Websphere 错误

java - Thymeleaf 下拉列表未填充

java - 从 OnCreate 调用另一个 java 方法时出现 NullPointerException

java - 枚举常量特定初始化

Java登录方法: runs if details are correct but NullPointerException if incorrect

java - 尝试在 java 中设置 double 组时出现 NullPointerException

excel - 是否可以找到每个Excel行的最后一个元素距离?