6
votes

J2ME (Java) - Null Pointer Exception pris dans la classe d'affichage

Je travaille actuellement avec Midlets (j'utilise une mi-médiane visuelle) dans Netbeans, et une nullpoinpointException est lancée mais je ne sais pas pourquoi.

Remarque: strong> L'exception n'est pas lancée lorsque le programme s'exécute sur l'émulateur, uniquement lorsque le bouton de commande OK est enfoncé. P>

Voici l'erreur que je reçois p >

package stMidlet;

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

public class StoryMidlet extends MIDlet implements CommandListener {

    private boolean midletPaused = false;
    private Command commandOk1;
    private Form form1;
    private TextField textField1;

    public StoryMidlet() {
        commandOk1 = new Command("Ok", Command.OK, 1);
        textField1 = new TextField("Enter value: ", null, 120, TextField.ANY);
        form1 = new Form(null, new Item[]{textField1});
        form1.addCommand(commandOk1);
Display.getDisplay(this).setCurrent(form1);
    }

/* There were some methods here pre-inserted by netbeans. */

/* I have not changed these, but I can post them if you need me too */

/* initialize() */

/* startMIDlet() */

/* resumeMidlet() */

/* switchDisplayable */


/* getDisplay() */

/* exitMidlet() */

/* startApp() */

/* pauseApp() */

/* destroyApp() */


    public void commandAction(Command c, Displayable d) {
        if (c == commandOk1)
        {
            System.out.println("Test");
        }
    }


2 commentaires

Déboguer depuis seulement une heure? Vous avez plus dans le réservoir. Sur une note sérieuse, prenez une profonde respiration et de l'écart pendant quelques heures. Vous allez certainement l'obtenir si quelqu'un ne fonctionne pas d'abord.


DISPLAY.GETDISPLAY (Ceci) est dit pour fuir car "ceci" s'échappe du constructeur. Basé sur votre constructeur configuré cependant, il est peu probable que cela provoque la NullpointerException (comme tout a déjà été initialisé)


4 Réponses :


3
votes

Edit: Je pourrais peut-être modifier ma réponse parce que je pense que ce que j'ai dit n'est pas pertinent, mais je vais laisser tomber sur la chance de pouvoir aider!

Cela fait longtemps que j'ai travaillé dans J2Me, mais ayant regardé un ancien code que j'ai remarqué que je n'ai jamais rien fait d'utile dans le constructeur. Je parie que votre appel à afficher.getDisplay (ceci) provoque une nullptrexception car quelque chose n'a pas encore été initialisé. En fait, je suis sûr que l'utilisation de ce pointeur dans un constructeur est assez certain de provoquer ce type d'erreur.

Essayez de faire face à l'affichage dans la fonction startApp () et si ce code que je fais référence est correct, vous devez garder un booléen qui marque si votre médiat a été initialisé et non.

Vous pouvez consulter un ancien code de mien ici pour référence:

http: //code.google.com/p/jmingle/source/browse/trunk/src/org/oep/jmingle/jmingle.java#68


0 commentaires

1
votes

Peut-être que vous devez ajouter

form1.setcommandlistener (this);


0 commentaires

1
votes

Je l'ai également remarqué ... XXX PRE>

Manque de P>

this.setCommandListener(this);


0 commentaires

0
votes

Vous devez faire dans l'ordre:

  • form1.setcommandlistener
  • form1.addcommand ..
  • ....
  • Après tout: midlet.getdisplay.setCurrent (form1);

    Si vous invoquez «SetCurrent» avant d'ajouter les commandes et l'écouteur, l'écran Form1 apparaît toujours, mais lorsque vous touchez une commande, elle soulève une erreur au-dessus.


0 commentaires