Java KeyListener未检测到按键

Java KeyListener未检测到按键,java,keyboard,keylistener,keyevent,Java,Keyboard,Keylistener,Keyevent,我制作了一个游戏,我想在按下p键时暂停游戏。但是,当游戏运行时,keylister似乎没有检测到按下了P键 我的代码正确吗?我是否已将addKeyListener放置在正确的位置 上面也有类似的问题,但它们似乎都在使用JFrame,而我使用的是。我不确定这是否有区别 主要游戏循环: @Override public void run() { addKeyListener(new MyKeyListener()); displayStartScreen(); displ

我制作了一个游戏,我想在按下p键时暂停游戏。但是,当游戏运行时,
keylister
似乎没有检测到按下了P键

我的代码正确吗?我是否已将
addKeyListener
放置在正确的位置

上面也有类似的问题,但它们似乎都在使用
JFrame
,而我使用的是。我不确定这是否有区别

主要游戏循环:

@Override
public void run() {

    addKeyListener(new MyKeyListener());

    displayStartScreen();
    displayUI();
    drawBricks(getWidth() / 2.0, BRICK_Y_OFFSET);
    drawPaddle();

    while (lives > 0) {

        drawBall();
        playGame(); // additional game loop

        if (brickCounter == 0) {
            removeAll(); // removes all game objects
            displayUI();
            drawBricks(getWidth() / 2.0, BRICK_Y_OFFSET);
            drawPaddle();
            brickCounter = 100;
            }
        }
    } 
    if (brickCounter > 0) {
        removeAll();
        printGameOver();
    }
}
private void playGame() {

    getBallVelocity();

    while (true) {

        moveBall();
        updateUI();

        if (ball.getY() >= getHeight()) {
            lives--;
            break;
        }
        if (brickCounter == 0) {
            break;
        }
    }
}
附加游戏循环:

@Override
public void run() {

    addKeyListener(new MyKeyListener());

    displayStartScreen();
    displayUI();
    drawBricks(getWidth() / 2.0, BRICK_Y_OFFSET);
    drawPaddle();

    while (lives > 0) {

        drawBall();
        playGame(); // additional game loop

        if (brickCounter == 0) {
            removeAll(); // removes all game objects
            displayUI();
            drawBricks(getWidth() / 2.0, BRICK_Y_OFFSET);
            drawPaddle();
            brickCounter = 100;
            }
        }
    } 
    if (brickCounter > 0) {
        removeAll();
        printGameOver();
    }
}
private void playGame() {

    getBallVelocity();

    while (true) {

        moveBall();
        updateUI();

        if (ball.getY() >= getHeight()) {
            lives--;
            break;
        }
        if (brickCounter == 0) {
            break;
        }
    }
}
KeyListener类:

private class MyKeyListener implements KeyListener {

    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        if (keyCode == KeyEvent.VK_P) {
            System.out.println("Key 'P' has been pressed!"); // test
        }
    }

    @Override
    public void keyReleased(KeyEvent e) { /* Empty body */ }

    @Override
    public void keyTyped(KeyEvent e) { /* Empty body */ }
}

解决了这个问题。代码

addKeyListener(new MyKeyListener());
是不正确的,应该是

addKeyListeners(new MyKeyListener());

你的代码看起来不错。acm.grachics(无论是什么)是否接受按键?它需要专注吗?您是否尝试过使用JFrame检查代码?addKeyListener是您的库提供的方法吗?您是否将侦听器分配给了正确的组件?@SteveSmith抱歉,这是一个输入错误,我已编辑了该问题。是一个图形模块,我用它在屏幕上画游戏对象。我不知道你所说的专注是什么意思;游戏只使用鼠标来控制一个“桨”,键盘从来没有使用过(所以我猜没有焦点?)。这就是我想通过添加keylistener@ItFreak是的,但是我拼写错误,IDE没有发现这个