Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème à l'éxécution

Unable to create MIDlet

Sujet résolu
    21 décembre 2009 à 22:10:21

    Bonjour,
    voilà je développe un petit snake avec J2ME.

    Le code de mon MIDlet :

    /*---------------------------------------------------------------------------------------------------------------------|
    |                                                           Snake.java                                                                         | 
     |                                                                                                                                                   |
     |                                                      créé par wanghao10                                                               |
     |                                                                                                                                                   |
     |----------------------------------------------------------------------------------------------------------------------|
     */
    import javax.microedition.midlet.*; // on importe J2ME
    import javax.microedition.lcdui.*; // on importe J2ME
    
    public class Snake extends MIDlet implements CommandListener{ // Classe principale
    
        Display affichage; // affichage	 
        JEcran fenetre; // fenetre
    
        public Snake(){ // Constructeur
    					       
            affichage = Display.getDisplay(this); // affichage				
            fenetre = new JEcran(this); // fenêtre				
        }		
    			
        public void startApp(){ // évènement exécuté au démarrage de l'application
    					       
            affichage.setCurrent(fenetre); // on affiche la fenêtre		
        }
    				
        public void destroyApp(boolean unconditional){ // évènement exécuté à la fermeture de l'application
        }
    					
        public void pauseApp(){ // évènement exécuté lors de la mise en pause d'application
        }
    	
    	public void commandAction(Command c, Displayable d){
    	}
    }
    


    Aucune erreur n'est affichée durant la compilation mais durant l'exécution quand j'ai cliqué sur launch dans l'émulateur du wireless toolkit :

    Unable to create MIDlet Snake
    java.lang.NullPointerException
            at JEcran.<init>(+157)
            at Snake.<init>(+21)
            at java.lang.Class.runCustomCode(+0)
            at com.sun.midp.midlet.MIDletState.createMIDlet(+34)
            at com.sun.midp.midlet.Selector.run(+22)


    L'erreur vient-elle du MIDlet ? D'autre part ?
    Comment résoudre ce problème ?
    • Partager sur Facebook
    • Partager sur Twitter
      22 décembre 2009 à 15:58:24

      Le message d'erreur suggère une variable à null dans le constructeur de JEcran. Peut-on en voir le code ?
      • Partager sur Facebook
      • Partager sur Twitter
        22 décembre 2009 à 16:26:06

        JEcran.java : (Canvas)

        /*---------------------------------------------------------------------------------------------------------------------|
        |                                                           JEcran.java                                                                        | 
         |                                                                                                                                                   |
         |                                                      créé par wanghao10                                                                  |
         |                                                                                                                                                   |
         |----------------------------------------------------------------------------------------------------------------------|
         */
        import javax.microedition.lcdui.game.*; // on importe J2ME
        import javax.microedition.lcdui.*; // on importe J2ME
        import java.io.*; // Entrees/Sorties
         
        public class JEcran extends Canvas implements Runnable, CommandListener{ // Ecran de jeu
        
            // variables et objets
        
            Image fond; // fond
        	Image fond2; // fond 2
        	Image fond3; // fond 3
        	Image jeu; // fond du jeu
        	Image tete; // tete du serpent
        	Image carre; // carre du serpent
        	Image queue; // queue du serpent
        	Image pomme; // pomme
        	Image banane; // bannane
        	Image mur; // mur
        	Image regles; // regles du jeu
        	int type = 1; // type
        	JSerpent serpent; // serpent
        	Pomme pome; // pomme
        	Graphics grap; // graphiques
        	JNiveaux niveaux; // chargeur de niveaux
        	int niveau; // niveau en cours
        	Snake snake; // snake
        	JOptions options; // options
        	
        	// commandes
        	
        	Command quitter; // commande quitter
        	Command retour; // commande retour
        
            public JEcran(Snake sn){ // Constructeur
        	
        	    snake = sn; // snake
        	
        	    try{ // gestion des exceptions
        		
        		    fond = Image.createImage("/menu.png"); // image du menu
                    fond2 = Image.createImage("/menu2.png"); // image du menu	2
                    fond3 = Image.createImage("/menu3.png"); // image du menu	3
                    jeu = Image.createImage("/fond.png"); // fond du jeu
                    tete = Image.createImage("/tete.png"); // tete du serpent
                    carre = Image.createImage("/carre.png"); // carre du serpent
        			queue = Image.createImage("/queue.png"); // queue du serpent		
                    pomme = Image.createImage("/pomme.png"); // pomme	
        			banane = Image.createImage("/banane.png"); // banane			
        			mur = Image.createImage("/mur.png"); // pomme	
        			regles = Image.createImage("/regles.png"); // regles du jeu	
        	    }
        		catch(IOException e){} // gestion des exceptions	
        		
        		serpent = new JSerpent(3, carre, tete, queue); // serpent
        		pome = new Pomme(pome.trouverX(serpent.carres), pome.trouverY(serpent.carres)); // pomme
        		niveaux = new JNiveaux(serpent, this, pome); // chargeur de niveaux
        		niveau = niveaux.WORM; // niveau en cours
        		options = new JOptions(this); // options 
        
        		// commandes
        		
        		quitter = new Command("Quitter", Command.EXIT, 1); // quitter
        		retour = new Command("Retour", Command.BACK, 1); // retour
        		addCommand(quitter); // on ajoute la commande
        		setCommandListener(this); // on ajoute un gestionnaire de commandes
        		}
        			
            public void run(){ // méthode d'exécution		
            }
        	
        	public void setType(int typ){ // méthode qui change le type
        	
        	    this.type = typ; // le type est le contenu à afficher
        	}
        	
        	public int type(){ // méthode qui retourne le type
        	
        	    return type; // on retourne le type
        	}
        
            public void paint(Graphics g){ // méthode d'affichage graphique
        	
        	    grap = g; // graphiques
        		niveaux.grap = g; // graphiques
        	
        	    g.setColor(0, 0, 0); // noir
        		g.fillRect(0, 0, this.getWidth(), this.getHeight()); // on dessine un rectangle noir
        		
        		if(fond != null && type == 1){ // si l'image n'est pas nulle
        		
        		    g.drawImage(fond, 0, 0, Graphics.LEFT | Graphics.TOP);
        			removeCommand(retour); // on enlève la commande
        			addCommand(quitter); // on ajoute la commande
        		}
        		
        		else if(fond != null && type == 2){ // si l'image n'est pas nulle
        		
        		    g.drawImage(fond2, 0, 0, Graphics.LEFT | Graphics.TOP);
        			removeCommand(retour); // on enlève la commande
        			addCommand(quitter); // on ajoute la commande
        		}
        		
        		else if(fond != null && type == 3){ // si l'image n'est pas nulle
        		
        		    g.drawImage(fond3, 0, 0, Graphics.LEFT | Graphics.TOP);
        			removeCommand(retour); // on enlève la commande
        			addCommand(quitter); // on ajoute la commande
        		}
        		
        		else if(fond != null && type == 4){ // si l'image n'est pas nulle
        		
        		    removeCommand(quitter); // on enlève la commande
        			addCommand(retour); // on ajoute la commande
        		    g.drawImage(jeu, 0, 0, Graphics.LEFT | Graphics.TOP);
        			
        			if(serpent != null){ // si le serpent n'est pas nul
        			
        			    niveaux.dessinerNiveau(niveau); // on dessine le niveau
        			}
        		}
        		
        		else if(fond != null && type == 5){ // si l'image n'est pas nulle
        		
        		    removeCommand(quitter); // on enlève la commande
        			addCommand(retour); // on ajoute la commande
        		    g.drawImage(regles, 0, 0, Graphics.LEFT | Graphics.TOP);
        		}
        		
        		if(type == 6){ // si le type est 6
        		
        		    snake.affichage.setCurrent(options); // on change de panneau
        			repaint(); // on repeint
        		}
        	}
        	
        	public void keyPressed(int key){ // évènements des touches
        	
        	    int touche = getGameAction(key); // évènement
        		
        		switch(touche){ // conditions
        		
        		    case DOWN : // si on appuie sur la touche bas
        		        if(type == 1 || type == 2){ // si le type est un ou 2
        				
        				    type++; // on augmente le type
        				}
        				
        				else if(type == 3){ // si le type est 3
        				
        				    type = 1; // on reme le type à 1
        				}
        				this.repaint(); // on repeint le composant
        		    break; // fin de la condition
        				
        			case UP : // si on appuie sur la touche haut
        		        if(type == 2 || type == 3){ // si le type est 2 ou 3
        				
        				    type--; // on augmente le type
        				}
        				
        				else if(type == 1){ // si le type est 1
        				
        				    type = 3; // on reme le type à 1
        				}
        				this.repaint(); // on repeint le composant
        		    break; // fin de la condition
        			
        			case 8: // si on appuie sur la touche ok
        			
        			    if(type == 1){ // si le type est 1
        				
        				    type = 4; // jeu
        					repaint(); // on repeint
        				}
        				
        				else if(type == 2){ // si le type est 2
        				
        				    type = 5; // jeu
        					repaint(); // on repeint
        				}
        				
        				else if(type == 3){ // si le type est 2
        				
        				    type = 6; // options
        					repaint(); // on repeint
        				}
        		}
        	}
        	
        	public void commandAction(Command c, Displayable d){ // commandes
        	
        	    if(c == quitter){ // si la commande est quitter
        		
        		    snake.destroyApp(false); // on détruit
        			snake.notifyDestroyed(); // message de notification
        		}
        		
        		else if(c == retour){ // si la commande est retour
        		
        		    if(type == 4){ // si on est dans le jeu
        			
        			    type = 1; // le type est 1
        				repaint(); // on repeint
        			}
        			
        			else if(type == 5){ // si on est dans les règles
        			
        			    type = 1; // le type est 1
        				repaint(); // on repeint
        			}
        		}
        	}
        }
        
        • Partager sur Facebook
        • Partager sur Twitter
          22 décembre 2009 à 18:23:25

          À mon avis, tu devrais ajouter du code pour la gestion de l'exception dans le bloc catch. Peut-être que le programme ne trouve pas une ou plusieurs images et que l'on n'en sait rien parce que ton code absorbe l'erreur... et plante par la suite.
          • Partager sur Facebook
          • Partager sur Twitter
            22 décembre 2009 à 21:28:52

            Apparement le problème vient de cette ligne :

            //pome = new Pomme(pome.trouverX(serpent.carres), pome.trouverY(serpent.carres), pomme); // pomme
            


            Le chemin de l'image est bon. Pouvez-vous m'aider ?
            • Partager sur Facebook
            • Partager sur Twitter
              24 décembre 2009 à 12:00:30

              Je cherche mais je ne trouve pas la réponse à mon problème. L'objet pome est pourtant instancié !
              • Partager sur Facebook
              • Partager sur Twitter
                24 décembre 2009 à 12:32:54

                Dans l'initialisation de pome, tu fais appel à une méthode de pome. Je pense que le problème vient de là.
                • Partager sur Facebook
                • Partager sur Twitter

                Problème à l'éxécution

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown