5
我正在使用Java編寫一箇舊機器的模擬,並且我希望我的鍵盤處理能夠獨立處理左右SHIFT鍵。在Windows上檢測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
@ajb,這也可能是一個有問題的物理鍵盤的怪癖;鍵盤製造商通過連接鍵的方式做了很有趣的事情,這使得鍵組合並不總能像預期的那樣工作。鍵盤可能不會發送「鍵釋放」信號,因爲製造商認爲「嘿,左側仍然下降,爲什麼我們會麻煩發送釋放信號?」 http://blogs.msdn.com/b/shawnhar/archive/2007/03/28/keyboards-suck.aspx –