更改扩展计时器任务的类的计时器速率



我试图制作一个音乐应用程序,它有一个扩展TimerTask的声音类。类声音具有一个音频行,该行使用计时器重复声音。

当我试图改变汇率时,我的问题出现了。下次声音开始时它会改变。

我尝试做这样的事情:

public class Sound extends TimerTask {
private boolean playing;
private Timer t;
private long rate;

public void turnOn(){
if(!playing){
    playing=true;
    t= new Timer();
    t.scheduleAtFixedRate(this, 0, rate);
}else{
    playing=false;
    t.cancel();
}
}
public void run(){
    if(playing){
        //Here it would play the sound
    }
}
public void changeRate(long rate){
    this.rate=rate;
}

但这行不通。正如我所读到的,我应该创建一个新的 TimerTask 来执行 scheduleAtFixedRate,但是 TimerTask 是类,所以,有没有办法在不创建另一个 Sound 类对象的情况下做到这一点?谢谢!

如果我

理解正确,你可能想要一个匿名类:

t.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        if (playing) {
            // play sound
        }
    }
}, 0, rate);

有了这个Sound就不必扩展TimerTask

最新更新