0
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());
     }
}

"Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at swing.labb3.DAOBilTextFile.(DAOBilTextFile.java:50)" が表示されますが、なぜですか? 理解できない?私の友人もまったく同じことを行い、彼のコードは機能します.... これがすべてのコードではありませんが、50 行目をコメントに入れました。

助けてくれてありがとう!

4

1 に答える 1

2

一見、ファイルが見つからないdatabilar.txtため、newBufferedReader呼び出しはIOException. そのため、finally ブロックに迂回してリーダーを閉じようとしますが、リーダーはnewBufferedReader呼び出しによって設定されていないため、まだnullであり、閉じようとするとNullPointerException. finally ブロックでは、そのためのテストが必要です。

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

その後、無害にその最終ブロックを終了し、外側の try ブロックで IOException キャッチャーに到達できます。

しかし、最大の問題は、ファイルが見つからないことです。

于 2013-02-22T01:30:54.737 に答える