java.lang. IllegalStateException при использовании Слушателя Документа в 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);

В этом случае я нашел следующую ошибку во время текста набора в текстовой области. Я не знаю, как решить.

Exception in thread "AWT-EventQueue-0" 
java.lang.IllegalStateException: Attempt to mutate in notification

Я думаю, что проблема состоит в том, чтобы установить текст в документе или документе установки в слушателе документа. Но я не знаю, как решить это. Помогите мне решить эту проблему.

9
задан BalusC 7 May 2010 в 14:08
поделиться

1 ответ

Вы не можете изменять документ внутри DocumentListener. Вместо этого напишите собственный документ, который переопределяет методы insertString () или remove ().

Из руководств по Java: Как написать DocumentListener

Прослушиватели документов не должны изменять содержимое документа; Изменение уже завершено к тому моменту, когда слушатель уведомлен об изменении. Вместо этого напишите настраиваемый документ, который переопределяет методы insertString или remove, или и то, и другое. Подробнее см. Прослушивание изменений в документе .

10
ответ дан 4 December 2019 в 15:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: