Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows上检测Java中的SHIFT键时出现问题_Java_Awt_Keylistener_Key Events - Fatal编程技术网

在Windows上检测Java中的SHIFT键时出现问题

在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 ->

我正在用Java编写一个旧机器的模拟,我希望我的键盘处理能够独立地处理左键和右键

我注册了一个标准的AWT
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键并没有像这样失败——我看到了我希望看到的所有事件

使用标准的Sun
KeyEventDemo.java
程序很容易重现这种行为

尝试以下操作:
1.在其他xp/win7/win8上运行相同的程序。2.使用完全不同的键盘组运行相同的程序。这可能会解决问题

我猜是“Windows异常”。可能存在影响此功能的注册表设置;当我得到我的桌面时,两个Alt键的行为不同,我有一个很好的理由希望它们是相同的,我发现我可以修复注册表使其工作。不过,你的问题不同。@ajb,这也可能是有问题的物理键盘的一个怪癖;键盘制造商对按键的接线方式做了一些非常有趣的事情,这使得按键组合并非总是如预期的那样工作。键盘可能不会发送“按键释放”信号,因为制造商认为“嘿,左键仍处于关闭状态,为什么我们要麻烦发送释放信号?”