Java 如何检查按键是否连续按下?

Java 如何检查按键是否连续按下?,java,Java,我试过了,但没用 我必须在按键时运行动画 我的代码: 使用KEY\u RELEASED事件执行类似的操作应该可以: case KeyEvent.VK_RIGHT: if (KeyEvent.getID() == KeyEvent.KEY_PRESSED) bool = true; while(bool){ estado = ANDA0; posX += 10; if (KeyEvent.getID() =

我试过了,但没用

我必须在按键时运行动画

我的代码:
使用
KEY\u RELEASED
事件执行类似的操作应该可以:

    case KeyEvent.VK_RIGHT:
    if (KeyEvent.getID() == KeyEvent.KEY_PRESSED)
        bool = true;

    while(bool){

        estado = ANDA0;
        posX += 10;
        if (KeyEvent.getID() == KeyEvent.KEY_RELEASED)
        bool = false;

    }

    estado = PARADO;

  break;

while循环将完全覆盖GUI事件线程,防止任何操作发生,包括动画操作和关键点读取事件。相反,我建议您:

  • 如果这是Swing而不是KeyListener,则使用
  • 更改使用摆动计时器作为动画循环,而不是线程冻结
    while(true)
    循环
  • 在按键时(从键绑定),将状态更改为状态字段
  • 在密钥释放时(再次从绑定中),恢复同一字段的状态
  • 根据上面更改的状态字段的状态,确定动画循环中发生的情况

例如,请查看使用发布的
键\u
事件出于好奇,这是如何工作的?在我所知道的Java中,在事件处理线程中忙着等待一个事件会使程序冻结。@cHao我认为,因为他使用了一个
开关盒
,该键已经被按下了。是的,但是在你得到一个
键释放
事件之前,它必须被释放。这意味着你在等待一个新事件。我认为它将永远为false,因为你不返回,这意味着你正在占用事件处理线程,这意味着下一个事件将永远不会得到处理。这就是为什么我要问这个问题——这件事似乎很奇怪。不过,你还在忙着等待。您已经拥有的事件不会改变其类型。
    case KeyEvent.VK_RIGHT:
    if (KeyEvent.getID() == KeyEvent.KEY_PRESSED)
        bool = true;

    while(bool){

        estado = ANDA0;
        posX += 10;
        if (KeyEvent.getID() == KeyEvent.KEY_RELEASED)
        bool = false;

    }

    estado = PARADO;

  break;