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

时间:2014-02-12 20:22:09

标签: java awt keylistener key-events

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

我有一个标准的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.

所以,我丢失了右边的KeyReleased()信息 - SHIFT 。在Windows上运行时,这会以这种方式失败,但在Linux上正常工作(我看到所有事件)。有任何想法吗?这只是我不得不忍受的Windows异常吗?奇怪的是,使用两个 Ctrl 键并没有像这样失败 - 我希望看到所有事件。

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

1 个答案:

答案 0 :(得分:0)

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