2009-10-29 59 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