Java processKeyEvent时swing中的堆栈溢出

Java processKeyEvent时swing中的堆栈溢出,java,user-interface,stack,Java,User Interface,Stack,我正在与一个我不太明白的错误作斗争。 我有一个Java类,我们称之为从JDTable派生的DownloadTable。 这些类中的每一个都实现了KeyListener 我希望基类JDTable处理一些击键,因此我将this.AddListener(this)放入其构造函数中,并创建一个键处理程序 public void键按下(KeyEvent e){…} 然后我希望派生类DownloadTable自己做一些特殊的键盘处理,因此我重复这个过程并在那里添加键盘处理程序。 我还从派生类的键处理程序添加

我正在与一个我不太明白的错误作斗争。 我有一个Java类,我们称之为从
JDTable
派生的
DownloadTable
。 这些类中的每一个都实现了
KeyListener

我希望基类
JDTable
处理一些击键,因此我将
this.AddListener(this)
放入其构造函数中,并创建一个键处理程序

public void键按下(KeyEvent e){…}

然后我希望派生类
DownloadTable
自己做一些特殊的键盘处理,因此我重复这个过程并在那里添加键盘处理程序。 我还从派生类的键处理程序添加了对
super.processKeyEvent()
的调用,以将派生处理程序和基处理程序连接在一起

问题是它没有按预期工作,每当调用
super.ProcessKeyEvent
时,我都会遇到堆栈溢出异常。在调试器中运行时,甚至不会调用父级的事件处理程序。我错过了什么明显的东西吗?
super.processKeyEvent()
不是要以某种方式调用超类“
keyPressed()
处理程序吗?谢谢

附加堆栈:

线程“AWT-EventQueue-1”java.lang.StackOverflowerr中出现异常 在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()
,否则会产生无限递归,正如您所看到的那样

你增加电话的原因是什么?当您删除它时,它是否工作正常?

processKeyEvent()
调用已注册的侦听器来传播密钥事件时,侦听器不应回调
processKeyEvent()
,否则会产生无限递归,如您所见

你增加电话的原因是什么?当你移除它时,它是否工作正常

我希望基类JDTable 处理一些按键

您不应该重写processKeyEvent()。你应该使用。提供的链接显示了每个Swing组件的现有绑定,并提供了指向Swing教程“使用键绑定”的链接

我希望基类JDTable 处理一些按键


您不应该重写processKeyEvent()。你应该使用。提供的链接向您展示了每个Swing组件的现有绑定,并提供了指向Swing教程“使用键绑定”的链接。

感谢您的回复,它们都是正确的

显然我已经解决了这个问题。我混淆了awt的
processKeyEvent()
KeyListener

正确的解决办法是增加

this.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) { ...
到基本方法。现在正在处理基方法和派生方法中的事件


然而,奇怪的是,
KeyAdapter
对我有效,而
keylister
却不行。不起作用的是,当我让基类实现
keylister
并添加方法
public void keyPressed(KeyEvent e){…}
-它永远不会被调用。如上所述,当我使用
KeyAdapter
inline时,它会被执行。

感谢您的回复,所有回复都是正确的

显然我已经解决了这个问题。我混淆了awt的
processKeyEvent()
KeyListener

正确的解决办法是增加

this.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) { ...
到基本方法。现在正在处理基方法和派生方法中的事件


然而,奇怪的是,
KeyAdapter
对我有效,而
keylister
却不行。不起作用的是,当我让基类实现
keylister
并添加方法
public void keyPressed(KeyEvent e){…}
-它永远不会被调用。如上所述,当我使用
KeyAdapter
inline时,它会被执行。

发布DownloadTable.keyPressed方法的内容。发布DownloadTable.keyPressed方法的内容。