java.lang.IllegalStateException tout en utilisant le Document Auditeur dans une TextArea, Java
DocumentListener dl = new MessageDocumentListener();
((AbstractDocument) nboxArea.getDocument()).setDocumentFilter(new DocumentFilter() {
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
string = string.replaceAll("\t", "");
super.insertString(fb, offset, string,(javax.swing.text.AttributeSet) attr);
}
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
text = text.replaceAll("\t", "");
//TODO must do something here
super.replace(fb, offset, length, text,(javax.swing.text.AttributeSet) attrs);
}
});
JTextArea evArea = (JTextArea) c;
evArea.getDocument().removeDocumentListener(dl);
evArea.setText(originalMessage);
Dans ce cas j'ai trouvé l'erreur suivante lors de texte dans le textarea. Je ne sais pas comment résoudre.
Exception in thread "AWT-EventQueue-0"
java.lang.IllegalStateException: Attempt to mutate in notification
Je pense que le problème est de mettre le texte dans le document ou la définition de document dans le document de l'auditeur. Mais je ne sais pas comment résoudre ce problème. Merci de m'aider à résoudre ce problème.
OriginalL'auteur Sunil Kumar Sahoo | 2010-05-07
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas modifier le document à l'intérieur de la DocumentListener. Écrire un Document personnalisé à la place, qui remplace le insertString() ou de supprimer() méthodes.
De Java Tutoriels: Comment écrire un DocumentListener
OriginalL'auteur Chadwick
Si vous souhaitez muter dans l'écouteur vous pouvez lancer un thread séparé pour le faire plus tard avec SwingUtilities.invokeLater.
Soyez prudent, car les modifications de la thread va appeler l'auditeur de nouveau, donc, mettre un booléen avant de lancer le thread, le retour immédiat de l'auditeur, s'il est défini et de le remettre après les modifications ont été faites dans le thread séparé.
OriginalL'auteur Derek