2013-02-21 163 views
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()); 
    } 
} 

我AWT-EventQueue的-0 「顯示java.lang.NullPointerException 在swing.labb3.DAOBilTextFile。(DAOBilTextFile.java:50) 」 但爲什麼得到「 在線程異常」?我不明白?和我的朋友做了完全相同的事情和他的代碼作品.... 這不是所有的代碼,但我已經在評論中放置第50行。爲什麼我得到nullpointerexeption?

感謝您的幫助!

+0

50線在哪裏? – Alex 2013-02-21 23:57:31

+0

} finally { reader.close(); – user2064844 2013-02-22 00:10:59

+0

爲內部嘗試塊添加'catch(Exception e){e.printStackTrace();}'以查看錯誤爲什麼reader爲null。在閱讀文件時可能存在一些問題。 – Alex 2013-02-22 00:33:27

回答

2

表面上看,你錯過了databilar.txt文件,所以newBufferedReader調用拋出一個IOException。所以它轉移到finally塊並試圖關閉閱讀器,但由於閱讀器未被newBufferedReader調用,它仍然是null,並且試圖關閉它會拋出NullPointerException。在finally塊,你需要一個測試:

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

那麼它將能夠安全地排出該finally塊,並獲得外try塊IOException異常捕手。

但是最大的問題是它無法找到該文件。

+0

okey,但沒有java創建該文本文件,或者我必須爲我的sellf?創建它:s – user2064844 2013-02-22 02:00:29

+0

@ user2064844:我認爲這是一個你已經擁有的文件。我現在看到你有一個創建它的方法,但是因爲它是一個實例方法,所以直到創建對象時才能調用它,但它是試圖讀取它的對象的構造函數。因此,您需要重構代碼(可能會提供另一個構造函數,以便您可以在沒有文件的情況下創建空白對象),以便首先運行文件創建代碼,或者自己創建文件。 – Boann 2013-02-22 03:27:19