在Windows上检测Java中的SHIFT键时出现问题
我正在用Java编写一个旧机器的模拟,我希望我的键盘处理能够独立地处理左键和右键 我注册了一个标准的AWT在Windows上检测Java中的SHIFT键时出现问题,java,awt,keylistener,key-events,Java,Awt,Keylistener,Key Events,我正在用Java编写一个旧机器的模拟,我希望我的键盘处理能够独立地处理左键和右键 我注册了一个标准的AWTKeyListener并处理KeyPressed()和KeyReleased()方法。问题是: 1) Press Left-SHIFT -> get KeyPressed() for VK_SHIFT with location=LEFT ... good! 2) Keep Left-SHIFT held down, press Right-SHIFT too ->
KeyListener
并处理KeyPressed()
和KeyReleased()
方法。问题是:
1) Press Left-SHIFT
-> get KeyPressed() for VK_SHIFT with location=LEFT ... good!
2) Keep Left-SHIFT held down, press Right-SHIFT too
-> get KeyPressed() for VK_SHIFT with location=RIGHT ... good!
3) Release Right-SHIFT (left-SHIFT still held down)
-> get ... absolutely nothing ... bad!
4) Release Left-SHIFT
-> get KeyReleased() for VK_SHIFT with location=LEFT ... good.
因此,我丢失了右移的keyreased()
信息。这在Windows上运行时会以这种方式失败,但在Linux上正常工作(我看到所有事件)。有什么想法吗?这只是我不得不忍受的一个Windows异常吗。奇怪的是,使用两个Ctrl键并没有像这样失败——我看到了我希望看到的所有事件
使用标准的SunKeyEventDemo.java
程序很容易重现这种行为 尝试以下操作:
1.在其他xp/win7/win8上运行相同的程序。2.使用完全不同的键盘组运行相同的程序。这可能会解决问题我猜是“Windows异常”。可能存在影响此功能的注册表设置;当我得到我的桌面时,两个Alt键的行为不同,我有一个很好的理由希望它们是相同的,我发现我可以修复注册表使其工作。不过,你的问题不同。@ajb,这也可能是有问题的物理键盘的一个怪癖;键盘制造商对按键的接线方式做了一些非常有趣的事情,这使得按键组合并非总是如预期的那样工作。键盘可能不会发送“按键释放”信号,因为制造商认为“嘿,左键仍处于关闭状态,为什么我们要麻烦发送释放信号?”