Attempt to mutate in notification

didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 15 sept. 2007 à 23:01
Drickflow Messages postés 1 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 26 mars 2012 - 26 mars 2012 à 08:13
Bonjour à tous.
J'ai un JTextPane. lorsque j'essaye d'affecter à une partie de texte précise une couleur (ou qqc comme ca: police, ...), j'obtient une exception "java.lang.IllegalStateException: Attempt to mutate in notification".

code utilisé : doc.setCharacterAttributes(start, length, doc.getStyle(styles[a]), true);
où "doc" et le StyledDocument du JTextPane en cours; "start" le debut de l'endroit à colorer; "length" la taille de la chaine à colorer.

Est ce que vous pouvez me dire comment faire pour éviter ce genre d'erreure ?

merci.

11 réponses

sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
16 sept. 2007 à 11:20
je paris que tu es dans une methode de notification ...; cette erreur se produit generalement lorsque tu essais de modifier la source d'une evenement ...
et c'est ce qui ce passe avec ton doc.set.....

tu peux essayer un truc du genre :


SwingUtilities.invokeLater(new Runnable() {

public void run() {
doc.setCharacterAttributes(start, length, doc.getStyle(styles[a]), true);

}

});

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
16 sept. 2007 à 11:48
Slt
effectivement, avec le morceau de code que tu m'a donné je n'ai plus l'erreur du début. Par contre j'en ai une autre:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: No match available

voila la méthode (l'exception se produit à l'intérieure du run de "SwingUtilities ...).
  pattern = Pattern.compile("" + cmds[a] + "" + motifs[a]);
  matcher = pattern.matcher(this.getText());
  while (matcher.find()) {
    try{
     SwingUtilities.invokeLater(new Runnable() {
      public void run() {
       doc.setCharacterAttributes(matcher.start(), matcher.end()-matcher.start(), doc.getStyle(styles[a]), true);
      }
     });
    }catch (Exception ex){
     ex.printStackTrace();
    }
  }

Les variables pattern et matcher sont déclarées private (elles ne sont pas dans la méthode elle même).
merci.
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
16 sept. 2007 à 11:50
PS: cette méthode est appelée à chaque modifications du texte en cours (j'ai ajouté un listener sur le document).
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
16 sept. 2007 à 11:51
quelle ligne foire ?

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
16 sept. 2007 à 11:55
doc.setCharacterAttributes(matcher.start(), matcher.end()-matcher.start(), doc.getStyle(styles[a]), true);
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
16 sept. 2007 à 11:58
ben il a rien trouver donc ben il te declenche une exception , je ne vois que ca

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
16 sept. 2007 à 13:03
Slt.

Par exemple: je cherches "%\\d+" dans "%1202145A12"; le programme doit me renvoyer la chaine "%1202145" car elle correspond bien au motif définit précédemment.
j'ai ajouté au code un "System.out.println("" + matcher.group());" pour voir  il n'y avait vraiment rien.
Résultat obtenu : "%1202145".
L'exception ne se produit que dans la ligne doc.setCharacterAttributes(matcher.start(), matcher.end()-matcher.start(), doc.getStyle(styles[a]), true);  (au moment de changer le style).

merci.
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
16 sept. 2007 à 13:06
PS: quand je déplace le system.out (....) pour le mettre dans le "run"  de SwingUtilities(....) , j'obtient la même exception.
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
16 sept. 2007 à 13:06
ben je sais pas tu dois avoir un pb avec les index de debut et de fin ...
essai pt ca :
pattern.matcher(doc.getText()); // suis pas sur du nom de la methode

quand je travail sur le Texte d'un JTextPane j'utilise toujours ddocument

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
16 sept. 2007 à 13:12
Même la méthode "doc.getText(0, doc.getLength())" ne fonctionne pas (je récupère bien le texte mais j'ai toujours l'exception).
0
Drickflow Messages postés 1 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 26 mars 2012
26 mars 2012 à 08:13
Merci a vous, j'ai pu finalement regle un probleme grace a vous.
:)
0
Rejoignez-nous