【问题标题】:stack overflow in swing at processKeyEventprocessKeyEvent 中的堆栈溢出
【发布时间】:2010-12-26 00:26:05
【问题描述】:

我正在与一个我不太理解的错误作斗争。 我有一个Java 类,我们称它为DownloadTable,它派生自JDTable。 这些类中的每一个都实现KeyListener

我希望基类JDTable 来处理一些击键,所以我将this.AddListener(this) 放在它的构造函数中并创建一个键处理程序

public void 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(Unknown Source)

【问题讨论】:

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

标签: java user-interface stack


【解决方案1】:

processKeyEvent() 调用注册的监听器来传播关键事件时,监听器不应该回调processKeyEvent() 或者结果是你看到的无限递归。

您添加通话的原因是什么?删除后是否有问题?

【讨论】:

    【解决方案2】:

    我想要基类 JDTable 处理一些击键

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

    【讨论】:

      【解决方案3】:

      谢谢大家的回复,都是正确的。

      显然我已经找到了问题所在。我把awt的processKeyEvent()KeyListener弄混了。

      解决这个问题的正确方法是添加

      this.addKeyListener(new KeyAdapter() {
                  @Override
                  public void keyPressed(KeyEvent e) { ...
      

      到基本方法。现在正在处理基方法和派生方法中的事件。

      不过,奇怪的是 KeyAdapter 对我有用,而 KeyListener 却不行。当我让基类实现KeyListener 并添加方法public void keyPressed(KeyEvent e) { ... } 时不起作用,它永远不会被调用。正如我上面所说,当我使用KeyAdapter inline 时,它​​会被执行。

      【讨论】:

        猜你喜欢
        • 2019-05-18
        • 2016-06-12
        • 2014-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-15
        • 2012-12-20
        相关资源
        最近更新 更多