2010-09-10 3 views
0

J'ai créé une classe qui hérite de la classe Manager qui servira de support pour quatre autres classes abstraites appelées AbstractColumn. Imaginez une table avec 4 colonnes, la table elle-même est la classe principale et chaque colonne est AbstractColumn.Erreur NullPointerException

Je ne comprends pas pourquoi j'obtiendrais cette erreur.

Voici mes cours.

La principale ColumnHolder.java classe

package tec.expenses; 
import net.rim.device.api.system.Bitmap; 
import net.rim.device.api.ui.Manager; 
import net.rim.device.api.ui.component.BitmapField; 
import net.rim.device.api.ui.component.LabelField; 
import net.rim.device.api.ui.container.VerticalFieldManager; 
import net.rim.device.api.ui.decor.Background; 
import net.rim.device.api.ui.decor.BackgroundFactory; 




public class ColumnHolderManager extends Manager{ 

    private AbstractColumn Entry; 
    private AbstractColumn Category; 
    private AbstractColumn Date; 
    private AbstractColumn Amount; 

    protected ColumnHolderManager(long style){ 
     super(style); 

     Background mainBackground = BackgroundFactory.createSolidBackground(0xEEEEEE); 
     setBackground(mainBackground); 

     AbstractColumn Entry = new AbstractColumn("Entry", NO_HORIZONTAL_SCROLL); 
     AbstractColumn Category = new AbstractColumn("Category", NO_HORIZONTAL_SCROLL); 
     AbstractColumn Date = new AbstractColumn("Date", NO_HORIZONTAL_SCROLL); 
     AbstractColumn Amount = new AbstractColumn("Amount", NO_HORIZONTAL_SCROLL); 

     add(Entry); 
     add(Category); 
     add(Date); 
     add(Amount);   
    } 

    protected void sublayout(int width, int height) { 

     /*layoutChild(this.Entry, 85, 50); 
     setPositionChild(this.Entry, 10, 10); 

     layoutChild(this.Category, 85, 50); 
     setPositionChild(this.Category, 40, 0); 

     layoutChild(this.Date, 85, 50); 
     setPositionChild(this.Date, 70, 0); 

     layoutChild(this.Amount, 85, 50); 
     setPositionChild(this.Amount, 100, 0);*/ 

     setExtent(360, 203); 
    } 

} 

La classe abstraite AbstractColumn

package tec.expenses; 
import net.rim.device.api.system.Bitmap; 
import net.rim.device.api.ui.Manager; 
import net.rim.device.api.ui.component.BitmapField; 
import net.rim.device.api.ui.component.LabelField; 
import net.rim.device.api.ui.decor.Background; 
import net.rim.device.api.ui.decor.BackgroundFactory; 


public class AbstractColumn extends Manager { 
    LabelField labelHeader; 

    protected AbstractColumn(String header, long style){ 
     super(style); 

     Background mainBackground = BackgroundFactory.createSolidBackground(0xCACACA); 
     setBackground(mainBackground); 

     this.labelHeader = new LabelField(header); 

     add(labelHeader);  
    } 

    protected void sublayout(int width, int height) { 

     layoutChild(labelHeader, 80, 30); 
     setPositionChild(labelHeader, 5, 5);   

     setExtent(90, 50); 
    } 
} 

Comme vous pouvez voir les classes ne sont pas encore très simple, je ne comprends pas pourquoi je recevrais cette Erreur.

Je fais cette application pour Blackberry en utilisant Eclipse comme IDE. Lorsque je commente les méthodes setPositionChild des méthodes Sublayout, je n'ai plus l'exception, ce qui signifie que dans le constructeur de la classe ColumnHolderManager, la création des nouveaux objets AbstractColumn n'est pas réellement créée.

Une aide?

+2

trop de code pour être appelé "très SIMPLE" ... désolé – Topera

+1

Pourriez-vous fournir une trace de pile? – softcr

+0

Je ne peux pas fournir une trace de pile car je ne sais pas comment lancer Eclipse correctement. –

Répondre

4

Dans ces lignes:

AbstractColumn Entry = new AbstractColumn("Entry", NO_HORIZONTAL_SCROLL); 
AbstractColumn Category = new AbstractColumn("Category", NO_HORIZONTAL_SCROLL); 
AbstractColumn Date = new AbstractColumn("Date", NO_HORIZONTAL_SCROLL); 
AbstractColumn Amount = new AbstractColumn("Amount", NO_HORIZONTAL_SCROLL); 

vous créez et l'initialisation des variables locales.

Vous souhaitez initialiser vos membres d'instance. Comme ceci:

Entry = new AbstractColumn("Entry", NO_HORIZONTAL_SCROLL); 
Category = new AbstractColumn("Category", NO_HORIZONTAL_SCROLL); 
Date = new AbstractColumn("Date", NO_HORIZONTAL_SCROLL); 
Amount = new AbstractColumn("Amount", NO_HORIZONTAL_SCROLL); 

En outre, les règles de style normales de code Java indiquent que vos membres doivent commencer par une lettre minuscule: entrée, catégorie, date, montant.

+0

C'était l'erreur, merci beaucoup! –

0

Vous êtes shadowing membres de votre classe avec des variables locales. Les champs non primitifs sont initialisés avec null et vous les déclarez à nouveau dans votre bloc de code local. C'est ce qu'on appelle l'observation. Assurez-vous également que vous êtes conforme à la norme java naming conventions.

Questions connexes