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

Posted

技术标签:

【中文标题】在 Windows 上检测 Java 中的 SHIFT 键时出现问题【英文标题】:Problems detecting SHIFT keys in Java on Windows 【发布时间】:2014-03-11 10:03:42 【问题描述】:

我正在用 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.

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

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

【问题讨论】:

我的猜测是“Windows 异常”。可能有一个注册表设置会影响这一点;当我拿到我的桌面时,两个 Alt 键的行为不同,我有充分的理由希望它们相同,我发现我可以修复注册表以使其正常工作。不过,你的问题是不同的。 @ajb,这也可能是所讨论的物理键盘的怪癖;键盘制造商在按键连接方式上做了很多有趣的事情,这使得按键组合并不总是按预期工作。键盘可能不会发送“按键释放”信号,因为制造商认为“嘿,左边仍然向下,我们为什么还要费心发送释放信号?” blogs.msdn.com/b/shawnhar/archive/2007/03/28/… 【参考方案1】:

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

【讨论】:

以上是关于在 Windows 上检测 Java 中的 SHIFT 键时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 例程 300篇240. OpenCV 中的 Shi-Tomas 角点检测

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

python使用openCV图像加载(转化为灰度图像)Shi-Tomasi算法(Shi-Tomasi Corner Detector)进行角点检测在图像上标记每个角点可视化标记了角点的图像数据

shi_tomasi角点检测算法,GFTTDetector

OpenCV(21)角点检测1 -- Harris(基础)和Shi-Tomas(优化,佳)

Harris角点及Shi-Tomasi角点检测(转)