java *不是抽象的,并且未覆盖*中的抽象方法

问题描述:

先附上代码
import javax.sound.midi.*;
public class MiniMusicPlayer2 implements ControllerEventListener{

public static void main(String[] args){
    MiniMusicPlayer2 mini=new MiniMusicPlayer2();
    mini.go();
}

public void go(){

    try{
        Sequencer sequencer=MidiSystem.getSequencer();
        sequencer.open();

        int[] eventsIWant={127};
        sequencer.addControllerEventListener(this,eventsIWant);

        Sequence seq=new Sequence(Sequence.PPQ,4);
        Track track=seq.createTrack();

        for(int i=5;i<61;i+=4){
            track.add(makeEvent(144,1,i,100,i));

            track.add(makeEvent(176,1,127,0,i));

            track.add(makeEvent(128,1,i,100,i+2));
        }
        sequencer.setSequence(seq);
        sequencer.setTempoInBPM(220);
        sequencer.start();
    }catch(Exception ex){ex.printStackTrace();}
}

public void controlChange(ShortMessage event){
    System.out.println("la");
}

public static MidiEvent makeEvent(int comd,int chan,int one,int two,int tick){
    MidiEvent event=null;
    try{ShortMessage a=new ShortMessage();
        a.setMessage(comd,chan,one,two);
        event=new MidiEvent(a,tick);
    }catch(Exception e){}
    return event;   
}

}

报错为MiniMusicPlayer2.java:2: 错误: MiniMusicPlayer2不是抽象的, 并且未覆盖ControllerE
ventListener中的抽象方法controlChange(ShortMessage)
public class MiniMusicPlayer2 implements ControllerEventListener{
^
1 个错误


我看了很多解答,大多是讲某个大小写问题,但是我是照书打的,不知道错在哪。
顺带问一下,有没有教如何使用java API索引的网址和教学博客,我觉得自己用这个API好多都不知道怎么查

我将你的代码复制到我的环境上运行了一遍,发现是正常的,你的编译环境是否有问题?我的JDK版本是1.8的,不知道你的JDK是多少的?

用eclipse的话,这个public void controlChange(ShortMessage event)不用自己写,点击添加add uni...即可添加,然后在里面实现业务逻辑,说明一点,你这个和接口定义的不一样,一样的话,上面加个@overrride即可。。。但是一般都不用自己手动添加

controlChange的参数类型和父类一样么?检查看看

我将你的代码复制到我的环境上运行了一遍,发现是正常的,你的编译环境是否有问题?我的JDK版本是1.8的,不知道你的JDK是多少的?

这个方法重写得放在最后我用java11就是这样放中间就报错