gpt4 book ai didi

java - '<> 不是抽象的,即使不使用 keyReleased,也不会覆盖抽象方法 keyReleased'

转载 作者:行者123 更新时间:2023-12-02 01:52:00 25 4
gpt4 key购买 nike

我在创建此类时收到两个错误。第一个出现在:

public class DisplayerDeluxe extends JPanel implements ActionListener, 
KeyListener{

显示以下编译器错误:DisplayerDeluxe is not abstract and does not override abstract method keyReleased(java.awt.event.KeyEvent) in java.awt.event.KeyListener

此处显示下一个错误

public void startGame() {
paintCurrent(0, 0);
for(int i = 0; i < height; i++) {
for(int j = 0; j < width; j++) {
bRef[i][j].addKeyListener(new KeyListener() { //Error is shown here
@Override public void keyPressed(KeyEvent e) {
mazeBuilder.buildPath();
Grid grid = mazeBuilder.getGrid();
if(e.getKeyCode() == KeyEvent.VK_UP && getYPos() != 0
&& !getCell(getXPos(), getYPos(), grid).hasNorth()) {
moveUp();
}
else if(e.getKeyCode() == KeyEvent.VK_DOWN && getYPos() != height - 1
&& !getCell(getXPos(), getYPos(), grid).hasSouth()) {
moveDown();
}
else if(e.getKeyCode() == KeyEvent.VK_LEFT && getXPos() != 0
&& !getCell(getXPos(), getYPos(), grid).hasWest()) {
moveLeft();
}
else if(e.getKeyCode() == KeyEvent.VK_RIGHT && getXPos() != width - 1
&& !getCell(getXPos(), getYPos(), grid).hasEast()) {
moveRight();
}
else {
infoBox("Only arrow key input in a dirrection " +
"not blocked by a wall is valid.", "Maze Game");
}
}
});
}
}
infoBox("Welcome to the maze game! Navigate your way to the end by using the arrow keys!", "Maze Game");
}

错误内容为:<anonymous DisplayerDeluxe$1> is not abstract and does not override abstract method keyReleased(java.awt.event.KeyEvent) in java.awt.event.KeyListener

这让我非常困惑,因为我的代码中没有任何地方包含 keyReleased() 和 keyPressed() 有 @Override 符号。任何对此的见解将不胜感激!

最佳答案

当您声明new KeyListener() { ... }时您正在创建所谓的匿名内部类,该类扩展 KeyListener并创建它的未命名实例(因此是匿名的)。该错误提示您的匿名内部类,显示为 <anonymous DisplayerDeluxe$1> ,既不是抽象的,也没有实现方法 keyReleased(java.awt.event.KeyEvent)java.awt.event.KeyListener中所述.

KeyListener是一个接口(interface),它要求实现者提供 3 个方法。这意味着实现此接口(interface)的所有类(包括匿名内部类)必须是抽象的(因此没有义务提供实现)或提供了实现的具体/普通类。匿名内部类始终是具体的,而不是抽象的,因此必须始终实现所需的所有方法。

解决这个问题的方法是在不使用其他类的情况下实现其他两个方法。由于您没有为它们提供所需的功能,因此您可以将它们留空而不执行任何操作。大多数 IDE 实际上应该帮助您完成此任务,因为当您开始创建匿名内部类时,它们会提示为您生成未实现的方法。

或者,您可以扩展另一个类,该类可能已经使用 stub 实现了部分或全部这些方法,例如 KeyAdapter ,但最终所有方法都必须以某种方式实现。

关于java - '<> 不是抽象的,即使不使用 keyReleased,也不会覆盖抽象方法 keyReleased',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52833967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com