5

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

我有一个标准的 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
  -> 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——我看到所有事件都是我希望的。

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

4

1 回答 1

0

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

于 2014-02-14T17:54:48.547 回答