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 ?
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"
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.
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).
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"