gpt4 book ai didi

java - 如何找出谁破坏了 KEY_TYPED 事件?

转载 作者:太空宇宙 更新时间:2023-11-04 07:13:44 24 4
gpt4 key购买 nike

我有一个带有许多文本字段的Java应用程序,我可以通过按`然后按e输入例如é。这是许多应用程序中已知的行为。

现在,在特定的用户操作(启动应用程序的特定模块)之后,应用程序中的所有文本字段将无法键入 é

这是我所做的:

它发生在 Windows 还是 Linux 上?仅 Windows。

特定 JVM 会发生这种情况吗? AFAIS 不是 - 使用 6-32/64 和 7-32/64 我能够重现该问题。

应用程序的特定代码库是否会发生这种情况?是的,但是我无法从 Eclipse 中重现该问题,这可能是有用的信息。只是打包的应用程序有问题。

发生了什么事件?

启动模块之前:

*!*!* dispatching: java.awt.event.KeyEvent[KEY_PRESSED,keyCode=129,keyText=Akut (Dead),keyChar='┤',keyLocation=KEY_LOCATION_STANDARD,rawCode=221,primaryLevelUnicode=180,scancode=13,extendedKeyCode=0x81] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_RELEASED,keyCode=129,keyText=Akut (Dead),keyChar='┤',keyLocation=KEY_LOCATION_STANDARD,rawCode=221,primaryLevelUnicode=180,scancode=13,extendedKeyCode=0x81] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_PRESSED,keyCode=69,keyText=E,keyChar='e',keyLocation=KEY_LOCATION_STANDARD,rawCode=69,primaryLevelUnicode=101,scancode=18,extendedKeyCode=0x45] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unbekannt keyCode: 0x0,keyChar='Ú',keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_RELEASED,keyCode=69,keyText=E,keyChar='e',keyLocation=KEY_LOCATION_STANDARD,rawCode=69,primaryLevelUnicode=101,scancode=18,extendedKeyCode=0x45] on mainFrame

启动模块后:

*!*!* dispatching: java.awt.event.KeyEvent[KEY_PRESSED,keyCode=129,keyText=Akut (Dead),keyChar='┤',keyLocation=KEY_LOCATION_STANDARD,rawCode=221,primaryLevelUnicode=180,scancode=13,extendedKeyCode=0x81] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_RELEASED,keyCode=129,keyText=Akut (Dead),keyChar='┤',keyLocation=KEY_LOCATION_STANDARD,rawCode=221,primaryLevelUnicode=180,scancode=13,extendedKeyCode=0x81] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_PRESSED,keyCode=69,keyText=E,keyChar='e',keyLocation=KEY_LOCATION_STANDARD,rawCode=69,primaryLevelUnicode=101,scancode=18,extendedKeyCode=0x45] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unbekannt keyCode: 0x0,keyChar='e',keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_RELEASED,keyCode=69,keyText=E,keyChar='e',keyLocation=KEY_LOCATION_STANDARD,rawCode=69,primaryLevelUnicode=101,scancode=18,extendedKeyCode=0x45] on mainFrame

正如您在输出中看到的,编码显然是我知之甚少的一点。因此,即使我不明白在哪里设置编码以及为什么问题只会在特定时间点之后发生,编码也可能是一个问题。所以我个人认为编码不是原因。我尝试使用 -Dfile.encoding=Cp1252 -Dfile.encoding=ISO-8859-15 但问题仍然存在于 Eclipse 之外的 Windows 上,并且不会出现在 Linux 或 Eclipse 内部。

那么我在期待什么?我需要有人告诉我应该寻找什么来找到这个奇怪问题的原因。我找到的有关 KeyEvents 的任何文档对于初学者来说都太多了,我需要适合我现在所处位置的文档。谁构建 KEY_TYPED 事件?或者谁负责操纵错误的事件?

提前致谢!!

最佳答案

好的,我通过简单的远程调试和单步抛出事件通过的所有步骤找到了问题的原因。这很烦人,因为没有解决方案如何分析下一个此类问题。

在我的例子中,问题在于恶意模块深处有一个名为 KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(..)KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventPostProcessor(..) 的类,用于将事件重定向到其对象以对 KeyEvent 使用react,即使它们发生在子组件中也是如此。

问题是这个调度程序和处理器调用了e.consume(),这可能会影响KEY_TYPED事件的创建。事实上,当删除事件的消耗时,一切正常。

在 Eclipse 中,事情没有发生,因为某些类不在类路径上,因此在查找失败后,此时不会调用恶意类。令人沮丧。

即使我找到了解决方案,但我可以采取哪些步骤来调试类似的东西会很有趣?或者是否有任何关于如何在低级别创建事件的文档?

关于java - 如何找出谁破坏了 KEY_TYPED 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20283407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com