0

我正在尝试制作一个具有扩展 TimerTask 的 Sound 类的音乐应用程序。Sound 类有一条音频线,它通过计时器重复声音。

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

我试图做这样的事情:

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 类对象的情况下做到这一点?谢谢!

4

1 回答 1

0

如果我理解正确,您可能想要一个匿名课程:

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

有了这个Sound就不用扩展了TimerTask

于 2013-10-24T14:01:29.433 回答