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:
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:
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