KeyListener忽略if语句

时间:2015-02-05 12:13:28

标签: java if-statement keylistener

在此代码中:

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");
    }       
  }
}

我正在尝试打印空间" Hello world"一次,然后将spacePressed切换为true,从那时起不再做任何事情。

使用系统打印件我已经设法在我按下它之后发现spacePressed更改为true,但出于某种原因我可以再次按空格键更多的打印" Hello world"。

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

2 个答案:

答案 0 :(得分:4)

这是因为在方法中声明了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){

答案 1 :(得分:2)

由于spacePressed是一个局部变量,在下次调用时,它会再次使用false进行初始化。解决方案:将其移至KeyManager类的字段:

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");
            }               
        }
    }