2009-10-29 98 views
0

我正在爲Java ME編寫一個應用程序,並且我需要一個用於存放一些數據(PhoneBook)的類。當我試圖啓動這個應用程序時,我總是得到一個nullPointerException。我調用一個類的構造函數,併爲10個元素分配內存,所以它不應該爲null。我究竟做錯了什麼?Java中奇怪的nullPointerException異常

import javax.microedition.lcdui.*; 
import javax.microedition.midlet.MIDlet; 

public class TinyMIDlet extends MIDlet implements CommandListener { 

    private PhoneBook phoneBook = new PhoneBook(); 

    public void initPhoneBook() { 
     phoneBook.records[0].Name = new String("abc");   
    } 

    protected void startApp() { 
     initPhoneBook(); 
    } 

    public class Record { 
     public String Name; 
     public String Number; 
     public String email; 
     public String Group; 
    } 

    public class PhoneBook { 
     public Record[] records; 

     PhoneBook() { 
      records = new Record[10]; 
     } 
    } 
} 
+3

請問你爲什麼使用'new String(「abc」)'。我習慣了Java SE而不是ME,所以我不能確定,但​​我認爲這在Java中通常是一種不好的做法。 – luiscubal 2009-10-29 16:26:09

回答

13

記錄數組不是空,但它的每個單獨的元素是。您還需要實例化每個元素,現在它只是一個包含10個空條目的數組。

+0

Ops。我會發佈一個答案,但你更快... – luiscubal 2009-10-29 16:28:30

+0

謝謝,現在我明白了:) – vasin 2009-10-29 16:37:39

4
phoneBook.records[0].Name = new String("abc"); 

應該

phoneBook.records[0] = new Record(); 
phoneBook.records[0].Name= new String("abc");// or = "abc" 
+0

我同意這一點,你在你的例子中所做的所有事情都告訴代碼,你的數組將有10個電話號碼,你永遠不要給它新的對象。這應該工作。 – SacramentoJoe 2009-10-29 18:30:24

0

我沒有信譽夠了嗎(嘿嘿)編輯湯姆的詳細的答案,但是,要精確

phoneBook.records[0] = new something(); 

應該

phoneBook.records[0] = new Record(); 
+0

謝謝,我編輯了我的答案。 – Tom 2009-10-29 16:56:25