ActionListener是抽象的,不会覆盖抽象方法actionPerformed - 尽管包含了这个方法

Cor*_*gle 1 java swing overriding abstract actionlistener

所以我收到了错误 Class is not abstract and does not override abstract method actionPerformed(ActionEvent) in ActionListener

我知道这个错误的起源,但令我困惑的是我有这种方法.

public static ActionListener taskPerformer = new ActionListener(){
        public void actionPerformed(ActionEvent e){
        Clock cl = new Clock();
        if(seconds<59){
            seconds++;
        }else{
            seconds=0;
            if(minutes<59){
                minutes++;
            }else{
                minutes=0;
                if(hours<12){
                    hours++;
                }else{
                    hours=0;
                }
            }
        }

        cl.repaint();   
    }
};'
Run Code Online (Sandbox Code Playgroud)

不太确定发生了什么.有帮助吗?提前致谢.

编辑:上下文包括导入和相关方法

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.Object.*;
import java.text.DecimalFormat;
import java.awt.geom.*;


public class Clock extends JFrame implements ActionListener{
public static int seconds = 0;
public static int minutes = 0;
public static int hours = 9;

public static ActionListener taskPerformer = new ActionListener(){
        public void actionPerformed(ActionEvent e){
        Clock cl = new Clock();
        if(seconds<59){
            seconds++;
        }else{
            seconds=0;
            if(minutes<59){
                minutes++;
            }else{
                minutes=0;
                if(hours<12){
                    hours++;
                }else{
                    hours=0;
                }
            }
        }

        cl.repaint();   
    }
};
public static Timer timer = new Timer(1000, taskPerformer);

public static void main(String[] args){
    Clock cl = new Clock();
    init();
    SwingUtilities.invokeLater(new Runnable(){
        public void run() {
            createAndShowGUI();
        }
    });
}
public static void init(){
    timer.start();
}
public Clock() {
    super("Clock");
    timer.addActionListener(this);

}'
Run Code Online (Sandbox Code Playgroud)

Jea*_*sky 5

问题不在您发布的原始代码段中.你的类Clock没有实现actionPerformed().taskPerformer对象可以.但代码抱怨taskPerformer是一个ActionListener但Clock不是.

此外,您似乎没有在任何地方使用taskPerformer,所以为什么需要匿名类.你可以在Clock中定义actionPerformed()并完成它.

我认为有两种方法可以解决这个问题.(我省略了一些不相关的代码以使技术更清晰).

选项1 - 使用时钟作为监听器

    public class Clock extends JFrame implements ActionListener {
    public static int seconds = 0;
    public static int minutes = 0;
    public static int hours = 9;

    public void actionPerformed(ActionEvent e) {
        // code
    }

    public Timer timer;

    public Clock() {
        super("Clock");
        timer = new Timer(1000, this);
        timer.addActionListener(this);    
    }
}
Run Code Online (Sandbox Code Playgroud)

选项2 - 使用匿名侦听器

    public class Clock extends JFrame {
    public static int seconds = 0;
    public static int minutes = 0;
    public static int hours = 9;

    public static ActionListener taskPerformer = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // insert code here
        }
    };

    public static Timer timer = new Timer(1000, taskPerformer);

    public Clock() {
        super("Clock");
        timer.addActionListener(taskPerformer);    
    }
}
Run Code Online (Sandbox Code Playgroud)