EventListeners是否自动添加到Java Swing中的AWTEventMulticaster中

时间:2015-07-23 13:15:50

标签: java swing awt

在应用程序中实例化了多个JTextFields之后,我们在应用程序中看到了StackOverflow错误。如下所示,错误涉及AWTEventMulticaster。根据我对这是什么的解读,我不明白这是怎么发生的,因为我们从未明确地向AWTEventMulticaster添加事件listerners(直到现在我们还不知道它存在)。当我们将一个监听器附加到组件时,它是否以某种方式自动注册到AWTEventMulticaster

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
    at java.awt.AWTEventMulticaster.remove(Unknown Source)
    at java.awt.AWTEventMulticaster.removeInternal(Unknown Source)
    at java.awt.AWTEventMulticaster.remove(Unknown Source)
    at java.awt.AWTEventMulticaster.removeInternal(Unknown Source)
    at java.awt.AWTEventMulticaster.remove(Unknown Source)
    at java.awt.AWTEventMulticaster.removeInternal(Unknown Source)
    at java.awt.AWTEventMulticaster.remove(Unknown Source)
    at java.awt.AWTEventMulticaster.removeInternal(Unknown Source)

1 个答案:

答案 0 :(得分:0)

正如Java Doc ...

中所述
  

AWTEventMulticaster实现高效且线程安全的多播事件
  调度java.awt.event包中定义的AWT事件。

因此,如果您查看堆栈,则会一次又一次地调用方法remove和removeInternal。这表明正在调用方法删除。 http://i.stack.imgur.com/UNhUb.jpg][1]][1]。我怀疑你的一个代码片段正在创建随机的JTextField,这是一个问题来源。您是从面板中删除组件吗? 你仍然可以看看以下几点。

  1. 检查是否有任何keylistener / ActionListener / MouseListener注册到您反复堆叠的组件。

  2. 检查各个面板是否有重复的组件移除,这可能会导致多个内部或外部事件堆叠到AWTEventMultiCaster中。请记住,添加到面板的每个组件都有事件触发器。

  3. 如果查看java.awt.AWTEventMulticaster.remove的调用层次结构,那么在循环内发生的属性更改可能会导致此问题。

  4. 最后但同样重要的是,请确保在循环外更新UI。 updateUI或updateComponentTree方法必须保持在循环之外。 视口更新也可能是一个潜在的问题。

  5. 如果有帮助,请告诉我。或者发送确切导致问题的代码段。