所以我收到错误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();
}
};'
不太确定发生了什么。有帮助吗?提前谢谢。
编辑:上下文包括导入和相关方法
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);
}'
答案 0 :(得分: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);
}
}
选项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);
}
}
答案 1 :(得分:0)
一种简单的推送方式是,如果一个类实现ActionPerformed,则必须在该类边界内执行该操作。
答案 2 :(得分:0)
尝试将java.awt.event添加到您的代码中,如下所示:
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
//do something here
}
有同样的问题。为我工作。