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 :

Erreur "Uncaught exception java.lang.IllegalStateException" à l'appel d'une méthode


Sujet :

Java ME

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Par défaut Erreur "Uncaught exception java.lang.IllegalStateException" à l'appel d'une méthode
    Bonjour tout le monde,
    Depuis quelques jours que suis sur un projet j2me et basé sur des connections HTTP.

    Mon MIDLET est initialisé comme suit:

    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
     
    /**Initialise le MIDLET avec le formulaire d'accueil. */
    	public void startApp() {
     
    				mainscreen ("");
        }
     
        /**Affiche l'ecran d'accueil. */
        private void mainscreen(String msg)  {
    		form = new Form ("Connexion au DOMOBOX");
    		StringItem notifier = new StringItem ("",msg);
            form.append(login);
            form.append(password);
            form.append(notifier);
            display = Display.getDisplay(this);
     
            setCommands (form,true);
     
            display.setCurrent(form);
     
    	}
    Donc au démarrage j'ai un formulaire assez simple de login et de mot de passe.
    L'utilisateur s'authentifie si cela se passe bien, je notifie par un message 'OK' et j'initialise l'ecran suivant.
    Mais problème c'est lorsque l'on fournit pas le bon login et mot de passe, je dévrais à la base pouvoir notifier par un message "Erreur d'authentification" et rester toujours sur le même écran (login et mot de passe). Mais c'est pas le cas j'ai un bien jolie message 'Uncaught exception java/lang/IllegalStateException'

    C'est ce bout de code qui me permet de gérer tout cela :

    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
    63
    64
    65
    66
    67
    68
     
    private void seConnecter(String u, String p)  {
    		/**Pour se connecter au serveur HTTP*/
    		HttpConnection c = null;
    		/**Réponse du serveur HTTP sous forme de flux*/
            InputStream is = null;
     
    	        try {
    	        	c = (HttpConnection)Connector.open(url+"/connect/"+u+"/"+p);
    	        	c.setRequestMethod(HttpConnection.GET);
     
    	        	DataInputStream dis = new DataInputStream (c.openInputStream());
     
    	        	/**Récupération byte par byte de la réponse du serveur*/
    	        	int ch;
     
    	        	while ((ch = dis.read()) != -1) {
     
    	        		buffer.append((char)ch);
    	        	}
     
     
    	        } catch( Exception e )
    	        {
    	            e.printStackTrace();
    	            buffer.append( "ERROR CONNECTION HTTP" );
    	        }
     
    	/**Free i/o Stream et Connection HTTP*/     
    	        finally {
    	            if (is != null) {
    	                try {
    						is.close();
    					} catch (IOException e) {
     
    						e.printStackTrace();
    					}
    	            }
     
    	            if (c != null) {
    	                try {
    						c.close();
    					} catch (IOException e) {
     
    						e.printStackTrace();
    					}
    	            }
     
    	        }
     
    	        String result = new String (buffer.toString());
     
     
    	       if ((int)result.length() == 9) {
     
    				StringItem st = new StringItem ("","OK");
    	    	   form = new Form ("Connection...");
    	    	   form.append(st);
    				setCommands (form,false);
    				display.setCurrent(form);
     
    			} else {
     
    					mainscreen("erreur d'authentification");	
    			}
    	}
     
      }
    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    795
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 795
    Par défaut
    Salut syneta

    Je suggère que tu ajoutes un try catch dans ta fonction mainscreen().
    Tu pourrais ajouter une variable de débug que tu incrémentes à chaque ligne et affiche dans ton catch pour savoir précisément quelle ligne a généré l'erreur.

    Plus généralement, tu devrais mettre des try catch partout avec un petit message qui indique dans quel parti du code l'exception a été levée.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Par défaut
    Salut Aniki,
    Merci pour ta réponse, effectivement j'ai saturé de try/catch ma fonction mainscreen et cela semble résoudre le problème à un certain niveau. Le souci c'est que j'essaie de faire une instruction dans le genre form.append d'une variable nulle (login, password). J'ai donc amélioré la fonction en tant que telle :

    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
     
    /**Affiche l'ecran d'accueil. */
        private void mainscreen(String msg)  {
        	form = new Form ("Connexion au DOMOBOX");
    		StringItem notifier = new StringItem ("",msg);
    		login = new TextField("Nom d'utilisateur :", "", 20, TextField.ANY);
    		password = new TextField("Mot de passe :", "", 20, TextField.PASSWORD);
     
    	/** Léve l'exception FORM.APPEND d'une valeur nulle*/
    		try {
    			form.append(login);
    			form.append(password);
    		} catch (IllegalStateException e) {
    			//return;
    		}
    		form.append(notifier);
            display = Display.getDisplay(this);
            setCommands (form,true);
            display.setCurrent(form);	
    	}
    Mais voila quand j'entre volontairement le mauvais login et mot de passe à la première tentative, je reste coincer sur l'écran login et mot de passe, et l'application réagit plus et aucun traitement n'est plus effectué. J'ai quand même la notification de l'erreur que je voulais.
    Alors que le but rechercher c'est de donner à l'utilisateur l'occasion de retenter le saisi, jusqu'à ce qu'il entre le bon login et mot de passe.
    Mais quand à la première tentative j'entre le bon login et mot de passe, tout se passe bien, mon écran suivant est affiché. Merci encore.
    Pour la méthode debug incrémente j'ai pas bien saisi l'idée, mais je cogite encore la dessus.
    Images attachées Images attachées  

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    795
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 795
    Par défaut
    Tu devrais rajouter des Debug.Print (je ne me rappelle plus la syntaxe exacte en J2ME, mais on se comprend) un peu partout pour savoir où tu en es dans ton code.
    Ca te permettra de savoir quelle est la fonction qui bloque. À partir de là, tu pourras réflechir à comment éviter ça.

  5. #5
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Par défaut
    Merci,
    Bon je m'y met pour voir ce que cela donne.

  6. #6
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Par défaut
    Effectivement Aniki merci, cela marche parfaitement. J'ai pu déceler les erreurs et surmonter ça. Merci encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        static final void DEBUG(String s) {
            if (true) {
                System.out.println("DEBUG : "+s);
            }
        }

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/04/2013, 08h26
  2. L'exception : java.lang.IllegalStateException
    Par nadhir84 dans le forum JSF
    Réponses: 1
    Dernier message: 19/07/2011, 09h00
  3. l'exception : java.lang.IllegalStateException:
    Par moha_alnif dans le forum JSF
    Réponses: 10
    Dernier message: 10/07/2009, 12h06
  4. Erreur exception java.lang.NullPointerException
    Par geol99 dans le forum Langage
    Réponses: 2
    Dernier message: 14/06/2007, 20h24

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