在应用程序中实例化了多个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)
答案 0 :(得分:0)
正如Java Doc ...
中所述AWTEventMulticaster实现高效且线程安全的多播事件
调度java.awt.event包中定义的AWT事件。
因此,如果您查看堆栈,则会一次又一次地调用方法remove和removeInternal。这表明正在调用方法删除。 http://i.stack.imgur.com/UNhUb.jpg][1]][1]。我怀疑你的一个代码片段正在创建随机的JTextField,这是一个问题来源。您是从面板中删除组件吗? 你仍然可以看看以下几点。
检查是否有任何keylistener / ActionListener / MouseListener注册到您反复堆叠的组件。
检查各个面板是否有重复的组件移除,这可能会导致多个内部或外部事件堆叠到AWTEventMultiCaster中。请记住,添加到面板的每个组件都有事件触发器。
如果查看java.awt.AWTEventMulticaster.remove的调用层次结构,那么在循环内发生的属性更改可能会导致此问题。
最后但同样重要的是,请确保在循环外更新UI。 updateUI或updateComponentTree方法必须保持在循环之外。 视口更新也可能是一个潜在的问题。
如果有帮助,请告诉我。或者发送确切导致问题的代码段。