IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java ME Discussion :

Ecrreur Exécution application


Sujet :

Java ME

  1. #1
    Membre confirmé
    Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chef de Projet

    Informations forums :
    Inscription : Décembre 2004
    Messages : 166
    Par défaut Ecrreur Exécution application
    Bonjour,

    Je suis en train d'effectuer un tutoriel J2ME.
    La compilation de l'application fonctionne très bien mais à l'excécution j'ai l'erreur : "Java.NullPointerException".

    Pouvez-vous m'aidez svp.

    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    // contient les éléments de base
    import javax.microedition.midlet.*;
    // contient les éléments permettant de gérer l'interface
    import javax.microedition.lcdui.*;
     
    public class HelloWorld extends MIDlet implements CommandListener
    {
      private Display _display;
      private TextField _textField1;
      private Command _commandExit;
      private Form _form1;
     
      public HelloWorld()
      {
        // fait un lien avec l'affichage
        _display = Display.getDisplay(this);
     
        // creation d'un objet formulaire sur lequel on peut placer des composants
        _form1 = new Form("Test de HelloWorld");
     
        // creation d'un bouton pour sortir du programme
        _commandExit = new Command("Exit", Command.SCREEN,1);
     
        // creation d'un champ de texte contenant notre Hello World
        _textField1 = new TextField("","Hello World !",15,TextField.ANY);
     
        // ajout des composants au formulaire
        _form1.addCommand(_commandExit);
        _form1.append(_textField1);
        _form1.setCommandListener(this);  
      }
     
      // évènement exécuté au démarrage de l'application
      public void startApp()
      {
        // affichage du formulaire
        _display.setCurrent(_form1);
      }
     
      // évènement exécuté lors de la mise en pause de l'application
      public void pauseApp()
      {
      }
     
      // évènement exécuté lorsque l'application se termine
      public void destroyApp(boolean unconditional)
      {
      }
     
      public void commandAction(Command c, Displayable s)
      {
        // lors du clic sur le bouton Exit
        if (c == _commandExit)
        {
           // appel manuel à la fonction de fermeture
           destroyApp(false);
           // on demande au manager de fermer l'application
           notifyDestroyed();
        }
      }
    }

  2. #2
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Peut-être au niveau de la ligne "_display.setCurrent(_form1);", si jamais la récup statique "_display = Display.getDisplay(this);" faite dans le constructeur ne ramène rien... ce qui est probable car tu passes la référence "this" d'un objet en cours de construction...

  3. #3
    Membre confirmé
    Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chef de Projet

    Informations forums :
    Inscription : Décembre 2004
    Messages : 166
    Par défaut
    J'ai essayé mais le lors de l'appelle de "_display.setCurrent(_form1)", l'appel au constructeur a déjà été effectué.
    J'ai quand meme essayé mais ça ne fonctionne pas.

  4. #4
    Membre confirmé
    Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chef de Projet

    Informations forums :
    Inscription : Décembre 2004
    Messages : 166
    Par défaut
    J'ai mis tout le code de la classe en commentaire en ne laissant que les déclarations de fonctions et j'ai toujours l'erreur.
    Je pense qu'il faut que j'importe une classe mais je ne vois pas laquelle.

  5. #5
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Citation Envoyé par noname_971 Voir le message
    J'ai essayé mais le lors de l'appelle de "_display.setCurrent(_form1)", l'appel au constructeur a déjà été effectué.
    Oui, l'appel au constructeur de ta classe HelloWorld a été effectué, mais dans ce constructeur, tu passes à une méthode externe la référence "this" de ton objet en cours de construction. Je pense que c'est comme si tu faisais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _display = Display.getDisplay(null);
    ce qui te retourne surement null, donc quand tu fais "_display.setCurrent", ça lève une exception NullPointer. Faudrait débugguer pour savoir !

    Mets l'intégralité de ta stacktrace pour qu'on voit où ça crame vraiment.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 137
    Par défaut
    Lorsque l'application démarre, le manager java appelle la fonction startApp de ta Midlet.

    C'est dans cette méthode que tu dois faire les initialisation graphiques, pas dans le constructeur.

    Je te conseille de lire attentivement la doc de startApp et du cycle de vie des midlets.

    Bon courage.

  7. #7
    Membre confirmé
    Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chef de Projet

    Informations forums :
    Inscription : Décembre 2004
    Messages : 166
    Par défaut
    Merci pour vos conseils, je me renseignerai.
    J'ai contourner le problème en créant un nouveau projet et ça fonctionne très bien (je ne sais pas pourquoi).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exécuter Application client-serveur sous eclipse
    Par arnaudkenf dans le forum Eclipse
    Réponses: 1
    Dernier message: 28/07/2009, 19h22
  2. génération exécutable application web
    Par yasinfo dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 31/03/2009, 16h19
  3. Exécution application externe shell AppActivate
    Par Nico_stras dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 02/08/2007, 12h07
  4. Exécution application en fond ?
    Par spekal dans le forum Java ME
    Réponses: 3
    Dernier message: 25/09/2006, 11h08
  5. [FAQ] Exécuter application avec autre login/mot de passe
    Par Lung dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 16/01/2006, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo