我正在与一个我不太了解的错误作斗争。
我在Java中有一个类,我们称它为从DownloadTable
派生的JDTable
。
这些类中的每一个都实现KeyListener
。
我希望基类JDTable
处理一些击键,因此我将this.AddListener(this)
放入其构造函数中并创建一个键处理程序
公共无效keyPressed(KeyEvent e){...}
然后我希望派生类DownloadTable
自己进行一些特殊的键盘处理,因此我重复该过程并在其中添加键盘处理程序。
我还从派生类的键处理程序添加了对super.processKeyEvent()
的调用,以将派生处理程序和基本处理程序连接在一起。
问题是它不能按预期方式工作,每当调用super.ProcessKeyEvent
时,我都会收到堆栈溢出异常。在调试器中运行时,甚至不会调用父级的事件处理程序。我是否缺少明显的东西? super.processKeyEvent()
不会以某种方式调用超类的keyPressed()
处理程序吗?谢谢。
附加堆栈:
线程“ AWT-EventQueue-1”中的异常java.lang.StackOverflowError
在jd.gui.swing.jdgui.views.downloadview.DownloadTable.keyPressed(DownloadTable.java:253)
在java.awt.Component.processKeyEvent(未知来源)
在javax.swing.JComponent.processKeyEvent处(未知源)
在jd.gui.swing.jdgui.views.downloadview.DownloadTable.keyPressed(DownloadTable.java:253)
在java.awt.Component.processKeyEvent(未知来源)
在javax.swing.JComponent.processKeyEvent处(未知源)
在jd.gui.swing.jdgui.views.downloadview.DownloadTable.keyPressed(DownloadTable.java:253)
在java.awt.Component.processKeyEvent(未知来源)
最佳答案
当processKeyEvent()
调用注册的侦听器传播键事件时,侦听器不应回叫processKeyEvent()
,否则结果将是无限递归,如您所见。
您添加呼叫的原因是什么?删除它后,是否可以正常工作?