代码之家  ›  专栏  ›  技术社区  ›  Zhe Hin Yap

如何在计时器运行时禁用键盘输入?

  •  0
  • Zhe Hin Yap  · 技术社区  · 2 年前

    在我的代码中,当检测到箭头键时,字符会相应地移动。这是通过定时器和定时器任务来安排角色的“移动”来完成的。然而,当按下另一个键时,会导致角色翻转并完全发生故障。我正在寻找一种方法来阻止用户按下键盘上的任何键,直到角色完成移动。

    我的代码如下:

    @FXML
    public void moveCharacter(KeyEvent event) {
            switch (event.getCode()){
                case D, RIGHT:
                    try {
                        moveForward();
                    } catch (URISyntaxException | InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                    break;
                case A, LEFT:
                    try {
                        moveBack();
                    } catch (URISyntaxException e) {
                        throw new RuntimeException(e);
                    }
                    break;
             }
    }
    

    起初,我想用一个定时器来防止键盘在设定的时间后输入。这是这样做的:

    final long THRESHOLD = 1_500_000_000L;
    
    private long lastMoveNanos;
    
    long now = System.nanoTime();
    
    if (lastMoveNanos <= 0L || now - lastMoveNanos >= THRESHOLD) {
           //switch case here
    }
    lastMoveNanos = now;
    
    

    然而,它没有起作用,我的角色仍然出现了故障。 我也在切换案例中使用了Thread.sleep,但它只是阻止了我的角色移动并将其传送到目的地。

    提前谢谢你的任何建议。

    0 回复  |  直到 2 年前