我试图在程序中添加一个节拍器,这是它的类
public void playMet() throws IOException
{
int tempo = Integer.parseInt(met_speed.getText());
//tempo = 60/tempo;
double delay = 60/tempo*1000;
Thread t = new Thread(new Runnable()
{
@Override
public void run()
{
while(Play.isSelected()){
try {
playSound("Click1.wav");
System.out.println("beep");
Thread.sleep((long) delay);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
t.start();
}如果我将该值设置为60 per,或每秒一次,程序就可以正常工作。如果我把它设置为其他东西,它就会忽略睡眠。“system.out.println.”是用于测试的,而playSound是一个播放wav文件的类。
不确定我是否忽略了一些显而易见的事情,或者我是否偏离了我应该做的事情
发布于 2014-11-30 18:46:14
你在做整数除法
double delay = 60/tempo*1000;所以如果你把节奏设为100,60/100是0。如果值大于60,则睡眠始终为0。
你应该试着:
double delay = 60.0 / tempo * 1000.0;发布于 2016-01-23 14:58:46
我建议您使用下列延迟方法:
`
TimeUnit.NANOSECONDS.sleep(100);
TimeUnit.MICROSECONDS.sleep(100);
TimeUnit.MILLISECONDS.sleep(100);
TimeUnit.SECONDS.sleep(100);
TimeUnit.MINUTES.sleep(100);
TimeUnit.HOURS.sleep(100);
TimeUnit.DAYS.sleep(100);`这些方法很容易使用,而且我也使用它,而不需要乘以1000。
;)
https://stackoverflow.com/questions/27216803
复制相似问题