2014-02-12 57 views
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. 

所以,我已經失去了右手SHIFTKeyReleased()信息。在Windows上運行時,以這種方式失敗,但在Linux上正確運行(我看到所有事件)。有任何想法嗎?這只是我必須忍受的Windows異常。奇怪的是,它不會像這樣與這兩個Ctrl鍵—我看到所有事件,我希望。

使用標準Sun KeyEventDemo.java程序很容易重現此行爲。

+0

我的猜測是「Windows異常」。可能有一個註冊表設置影響到這一點;當我得到我的桌面時,兩個Alt鍵的行爲不同,我有一個很好的理由希望它們是相同的,我發現我可以修復註冊表使其工作。不過,你的問題不同。 – ajb

+2

@ajb,這也可能是一個有問題的物理鍵盤的怪癖;鍵盤製造商通過連接鍵的方式做了很有趣的事情,這使得鍵組合並不總能像預期的那樣工作。鍵盤可能不會發送「鍵釋放」信號,因爲製造商認爲「嘿,左側仍然下降,爲什麼我們會麻煩發送釋放信號?」 http://blogs.msdn.com/b/shawnhar/archive/2007/03/28/keyboards-suck.aspx –

回答

0

請嘗試以下操作: 1.在其他一些xp/win7/win8上運行相同的程序。 2.使用完全不同的鍵盤組運行相同的程序。這可能會解決問題