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

Composants Java Discussion :

IllegalStateException en appelant setText("") sur un JTextField


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de kerinel
    Profil pro
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Par défaut IllegalStateException en appelant setText("") sur un JTextField
    Bonjour,
    je suis face à un petit problème pour changer le texte d'un JTextField.
    J'utilise un JTextField pour récupérer un nombre que doit rentrer l'utilisateur. Afin de m'assurer qu'il ne rentre que une valeur numérique, j'ai enregistré un CarretListener aupres du JTextField pour contrôler ce qui se passe.
    Lorsque je reçois un CaretEvent, je récupère le contenu du JTextField et regarde si je peux ou non le transformer en valeur numérique. si c'est le cas tout va bien; sinon je voudrai remplacer le texte contenu par rien (""). Et c'est là que cela bloque car j'obtiens une IllegalStateException. Si j'ai bien compris je modifie le texte alors que ce n'est pas le bon moment.

    Voici le début du StackTrace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    java.lang.IllegalStateException: Attempt to mutate in notification
    	at javax.swing.text.AbstractDocument.writeLock(AbstractDocument.java:1323)
    	at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:644)
    	at javax.swing.text.JTextComponent.setText(JTextComponent.java:1693)
    	at rails.graphique.MakeReseau.caretUpdate(MakeReseau.java:440)
    et le bout de code correspondant dans le CaretListener:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //echel est un float declare plus haut
     
    String s = MonJTextField.getText();
    if ((s!=null)&&(!s.equals(""))){
    	try{
    		echel=(formatNombre.parse(s)).floatValue();
    	}
    	catch (Exception erreur){
    		echel=0;
    		MonJTextField.setText("");
    	}
    }
    C'est lorsque je fais MonJTextField.setText(""); que je lève l'exception.

    Comment résoudre ce problème: la création d'un "minithread" pour attendre quelque millisecondes résoudra-t-elle le problème ? Pas vraiment clean non plus.

    merci pour votre aide.

    Bon code,
    kerinel

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    bonjour,
    mets le bout de code incriminé dans un Runnable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        MonJTextField.setText("");
      }
    });
    Sinon fais les vérifications a priori en créant ta propre instance de Document que tu attaches au textfield.

  3. #3
    Membre confirmé Avatar de kerinel
    Profil pro
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Par défaut
    Super,
    ça fonctionne !
    Bon par contre j'ai un autre problème du coup c'est qu'il n'a aucun problème à me convertir "12bb1" en float... si je commence par une lettre c'est pas bon mais sinon je peux mettre des lettres et ça ne le gène pas . Je vais me pencher sur le NumberFormat pour voir ça.
    merci encore,

    Bon code,
    kerinel

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/01/2006, 16h31
  2. Appeler une image faite sur 3DS Max ??
    Par CCin dans le forum OpenGL
    Réponses: 4
    Dernier message: 24/10/2005, 10h41
  3. Réponses: 3
    Dernier message: 04/10/2005, 15h39
  4. PB pour Appel fonction dans DLL sur Builder3
    Par Fbartolo dans le forum C++Builder
    Réponses: 15
    Dernier message: 10/03/2005, 12h58

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