2009-10-29 4 views
0

J'écris une application pour Java ME, et j'ai besoin d'une classe pour contenir des données (PhoneBook). Lorsque j'essaie de lancer cette application, je reçois toujours une exception nullPointerException. J'appelle le constructeur d'une classe, et il alloue de la mémoire pour 10 éléments, donc il ne devrait pas être nul. Qu'est-ce que je fais mal?Strange nullPointerException en 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

Puis-je demander pourquoi utilisez-vous 'new String ("abc")'. Je suis habitué à Java SE et pas à ME donc je ne peux pas en être sûr, mais je pensais que c'était généralement une mauvaise pratique en Java. – luiscubal

Répondre

13

Le tableau d'enregistrements n'est pas nul, mais chaque élément individuel est. Vous devez également instancier chaque élément, pour le moment, il s'agit juste d'un tableau avec 10 entrées nulles.

+0

Ops. J'allais poster une réponse mais vous étiez plus rapide ... – luiscubal

+0

Merci, maintenant j'ai compris :) – vasin

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

devrait être

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

Je suis d'accord avec cela, tout ce que vous avez fait dans votre exemple est de dire au code que votre tableau aura 10 numéros de téléphone, vous ne lui donne jamais le nouvel objet. Cela devrait fonctionner. – SacramentoJoe

0

Je ne suis pas encore assez bonne réputation (heh) pour modifier la réponse détaillée de Tom, mais, pour être précis

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

devrait être

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

Merci, j'ai édité ma réponse. – Tom