当前位置: 首页 > 面试题库 >

在TextArea,Java中使用文档侦听器时出现java.lang.IllegalStateException

锺离良哲
2023-03-14
问题内容
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);

在这种情况下,我在textarea中设置文本期间发现以下错误。我不知道该怎么解决。

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

我认为问题是在文档中设置文本或在文档侦听器中设置文档。但是我不知道该怎么解决。请帮我解决这个问题。


问题答案:

您不能在DocumentListener中修改文档。而是编写一个自定义Document,该文档将覆盖insertString()或remove()方法。

来自Java教程:如何编写DocumentListener

文档侦听器不应修改文档的内容;更改已在通知侦听器时完成。而是编写一个覆盖insertString或remove方法或两者的自定义文档。有关详细信息,请参见侦听文档中的更改。



 类似资料:
  • 问题内容: 我无法解决一项服务,而另一项正在解决?如果那是错误的意思,那么等待解决问题的方法是什么? java.lang.IllegalArgumentException:侦听器已在android.net.nsd.NsdManager.resolveService(NsdManager.java:613)处使用,位于com.example.miguel.broadcast.LocalService

  • 问题内容: 我有一个要求,如果在db表中插入一条记录,则需要自动执行一个Java进程。实现db侦听器的最简单方法是什么? 问题答案: 我有一个针对Oracle的解决方案。自从甲骨文购买了Java以来​​,你不需要创建自己的应用程序,因此它发布了一个监听器。据我所知,这在内部不使用轮询,而是将通知推送到Java端(可能基于某些触发器): 你可以像这样实现它(这只是一个示例): 编辑: 你可以使用以下

  • 问题内容: 以下两段代码之间的区别是什么? 和 问题答案: 的形式被提交时将只被调用 和 提交的值是从初始值不同。因此, 仅触发HTML DOM 事件时不会调用它。如果您想在HTML DOM 事件期间提交表单,则需要向输入组件添加另一个没有listener(!)的表单。它将导致仅处理当前组件的表单提交(如中所述)。 当使用代替时,默认情况下它将在HTML DOM 事件期间执行。在表示复选框或单选按

  • 嘿,当我运行应用程序时,它会给出一个错误java.lang.IllegalArgumentException:Invalid listener:null,这说明侦听器是空的。我是初学者,所以请大家帮忙解决这个问题。在这一行中出现错误:LocationManager.RequestLocationUpdates(provider,2000,0,locationListener);//这里是我的示例代

  • 问题内容: 我有一个应用程序,我想在其中监听对特定目录所做的任何更改。一旦在该目录中添加,删除或更新了任何文件,应用程序就应该对我执行ping操作。 问题答案: 您可以使用JNotify JNotify是一个Java库,允许Java应用程序侦听文件系统事件,例如:创建文件已修改文件已重命名文件已删除文件支持的平台 Windows(2000或更高版本)Windows注释支持INofity的Linux

  • 我有一个JPanel,我的(游戏)程序在其中绘制了一些由一段代码决定的东西。到目前为止,一切都很好。我写了一个非常基本的侦听器,它侦听程序背景模型的变化,然后应该告诉GUI更新,即移动游戏外观。 所有这些都发生在mouseListener触发的方法中。 我猜这就是问题所在,因为在JPanel中再次单击鼠标会正确更新JPanel,我可以看到模型移动的部分。 JPanel的代码: 更新调用了很多AWT