更改扩展TimerTask的类的计时器速率

时间:2013-10-24 13:53:22

标签: java timer timertask

我试图制作一个音乐应用程序,它有一个扩展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类对象的情况下做到这一点?谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

使用此Sound不必延长TimerTask