在 Java 中进行焦点调试
问题:
我正在尝试在我的Java Swing应用程序中调试一些与焦点相关的问题。有时,某些组件似乎正在吸引焦点,我无法弄清楚代码中发生这种情况的位置。
我尝试过:
-
带有 (for ) 的 A。这确实为我提供了有关哪些组件丢失和获得焦点的信息,但它并不能帮助我确定代码中请求焦点的位置。
VetoableChangeListener
KeyboardFocusManager
focusOwner
-
自定义 .但在这方面,我也只能在它收到事件时进行干预。到那时,调用 的调用堆栈已经丢失。
KeyboardFocusManager
requestFocus
-
自定义 .但是在那里,我也能够干预再次从EDT调用的方法。调用堆栈再次丢失(有趣的是,没有调用)。
EventQueue
dispatchEvent
postEvent(AWTEvent)
问题:
我正在寻找的是调用时的调用堆栈。是否有可能获得此信息。也许,如果我可以重新定义用于在 中发布事件的方法,那么我就可以打印堆栈转储。但是,不会被调用。requestFocusInWindow
EventQueue
EventQueue.postEvent(AWTEvent)
任何人都可以提出一个解决方案,帮助我在调用或可能已经调用时获得堆栈的状态?requestFocus
requestFocusInWIndow