我试图制作一个音乐应用程序,它有一个扩展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类对象的情况下做到这一点?谢谢!
答案 0 :(得分:0)
如果我理解正确你可能想要一个匿名课程:
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if (playing) {
// play sound
}
}
}, 0, rate);
使用此Sound
不必延长TimerTask
。