在 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.
所以,我丢失了右-SHIFT 的KeyReleased()
信息。在 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)进行角点检测在图像上标记每个角点可视化标记了角点的图像数据