2009-10-29 7 views
0

Я пишу приложение для Java ME, и мне нужен класс для хранения некоторых данных (PhoneBook). Когда я пытаюсь запустить это приложение, я всегда получаю исключение nullPointerException. Я вызываю конструктор класса, и он выделяет память для 10 элементов, поэтому он не должен быть нулевым. Что я делаю не так?Strange nullPointerException в Java

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

Могу ли я спросить, почему вы используете «новую строку» («abc»). Я привык к Java SE, а не к ME, поэтому я не могу быть уверен, но я подумал, что это, как правило, плохая практика на Java. – luiscubal

ответ

13

Массив записей не является нулевым, но каждый его отдельный элемент. Вам также нужно создать экземпляр каждого элемента, прямо сейчас это всего лишь массив с 10 нулевыми записями.

+0

Ops. Я собирался опубликовать ответ, но вы были быстрее ... – luiscubal

+0

Спасибо, теперь я понял :) – vasin

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

0

Я не авторитетными еще недостаточно (хех) редактировать подробный ответ Тома, но, чтобы быть точным

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

должен быть

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

Спасибо, я отредактировал свой ответ. – Tom

Смежные вопросы