2017-04-03 109 views
1

這是一個非常奇怪的問題,但我只是將一個簡單的keyListener添加到在keyPressed和keyReleased上打印的JPanel。通常它可以正常工作,但對於某些按鍵(如「A」),如果在釋放之前按住按鈕,在釋放之後沒有其他按鍵會觸發按鍵,直到按住某些按鍵(如「D」)。之後,除非按下「壞」鍵並保持太久,否則它會恢復正常。在mac上,在Java中,keyPressed事件不會觸發某些鍵

最後一個注意事項,keyReleased總是觸發正常,它只是keyPressed失敗。

EDIT2: 我已經簡化以簡化以下的代碼,它仍然表現爲如上所述:

import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

import javax.swing.JFrame; 

public class Test { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setSize(800, 600); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

     frame.addKeyListener(new KeyListener() { 

      @Override 
      public void keyTyped(KeyEvent e) { 

      } 

      @Override 
      public void keyPressed(KeyEvent e) { 
       System.out.println("Pressed"); 
      } 

      @Override 
      public void keyReleased(KeyEvent e) { 
       System.out.println("Released"); 
      } 

     }); 
    } 
} 

編輯: 代碼提取物:

JFrame frame = new JFrame("test"); 
frame.setSize(WIDTH, HEIGHT); 
frame.setLocationRelativeTo(null); 
frame.setLayout(null); 
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
frame.setResizable(false); 

JLayeredPane panel = new JLayeredPane(); 
panel.setBounds(0, 0, WIDTH, HEIGHT); 
panel.setLayout(null); 


frame.add(panel); 
KeyListener listener = new KeyListener() { 

    public void keyTyped(KeyEvent e) { 
     System.out.println("typed: "+e.getKeyCode()); 
    } 

    @Override 
    public void keyPressed(KeyEvent e) { 
     System.out.println("pressed: "+e.getKeyCode()); 
    } 

    @Override 
    public void keyReleased(KeyEvent e) { 
     System.out.println("released: "+e.getKeyCode()); 
     System.out.println(); 
    } 

}; 
panel.addKeyListener(listener); 
frame.addKeyListener(listener); 
frame.setVisible(true); 
+1

請分享您的代碼 –

+0

也許別的東西在Java看到它之前捕獲事件。你有沒有粘鍵或類似的運行? – ingyhere

+0

您正在使用哪種操作系統? – Felix

回答

0

我通過去固定它放入我的系統首選項 - >鍵盤,然後將按鍵重複滑塊一直移動到左側以「關閉」。

0

看來,這是一個Java漏洞的人升級到MacOS的塞拉利昂之後出現了:

作爲臨時解決辦法,你可以嘗試使用用於控制移動的標準WASD以外的按鍵。