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