KeyListener 忽略 if 语句

KeyListener ignores if-statements

在此代码中:

public class KeyManager implements KeyListener{

public void keyPressed(KeyEvent e) {
    boolean spacePressed = false;


if(e.getKeyCode() == KeyEvent.VK_SPACE){
    if(spacePressed == false){
    spacePressed = true;
    System.out.println("Hello world");
    }       
  }
}

我试图让 space 只打印一次 "Hello world",然后将 spacePressed 切换为 true,并且从那时起不再做任何事情。

使用系统打印我已经设法发现它在我按下它后确实将 spacePressed 更改为 true,但由于某种原因我可以再次按下 space并再次打印出 "Hello world".

简而言之,编译器似乎忽略了 if 语句并继续阅读,这是不应该发生的。

这是因为在方法内部声明了spacePressed。每次执行该方法时,它都会重新声明并初始化为 false.

在外面声明:

public class KeyManager implements KeyListener{

    boolean spacePressed = false;

    public void keyPressed(KeyEvent e) {


        if(e.getKeyCode() == KeyEvent.VK_SPACE){
            if(spacePressed == false){
            spacePressed = true;
            System.out.println("Hello world");
            }       
          }
        }

请注意spacePressed == false可以写成!spacePressed:

if(!spacePressed){

由于 spacePressed 是一个局部变量,在下一次调用时它会再次用 false 初始化。解决方法:移动到KeyManager class:

的一个字段
public class KeyManager implements KeyListener{
    private boolean spacePressed = false;

    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_SPACE){
            if(this.spacePressed == false){
                this.spacePressed = true;
                System.out.println("Hello world");
            }               
        }
    }