我正在与一个我不太了解的错误作斗争。
我在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(),否则结果将是无限递归,如您所见。

您添加呼叫的原因是什么?删除它后,是否可以正常工作?

09-25 11:25