Java Swing - 按下的键未被释放(有时)

时间:2011-07-18 10:41:24

标签: java swing keylistener

对于游戏,我使用KeyListener来了解何时按下某个键。

public synchronized void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
        keyRightIsDown = true;
    }
}

public synchronized void keyReleased(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
        keyRightIsDown = false;
    }
}

这有效率为99.9%。但是不时(通常足够),当释放键时({1}}没有被调用(导致游戏角色继续向右移动 - 再次按下该键可以解决问题)。

[也许相关:]我使用OSX 10.6并且经常安静地按下多个键。

如何100%完成这项工作?

2 个答案:

答案 0 :(得分:1)

可能会更好地了解KeyBindings,可以轻松地为关键操作构建Listener KeyListener

答案 1 :(得分:1)

类似的问题被多次询问,看看

how-to-know-when-a-user-has-really-released-a-key-in-java

how-to-stop-repeated-keypressed-keyreleased-events-in-swing

我希望这会有所帮助;

编辑:

你可以做的是使用轮询机制:

static Toolkit kit = Toolkit.getDefaultToolkit();
..
if (kit.getLockingKeyState(KeyEvent.VK_X))
..

这意味着如果按下某个键,您总是检查线程。 但请记住,投票效率不高。