Java Thread()睡眠问题

时间:2014-11-30 18:43:39

标签: java multithreading sleep

我正在尝试为程序添加一个节拍器,这里是它的类

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();
    }

如果我将值设置为60bpm,或者每秒一次,则程序运行正常。如果我把它设置为其他任何东西,它会忽略睡眠。 “system.out.println ..”用于测试,而playSound是一个播放wav文件的类。

不确定我是否忽视了一些明显的东西,或者我是否偏离了我应该做的事情

2 个答案:

答案 0 :(得分:4)

你正在做整数除法

double delay = 60/tempo*1000;

因此,如果您将速度设置为100,则60/100为0.对于大于60的值,您的睡眠将始终为0

你应该尝试:

double delay = 60.0 / tempo * 1000.0;

答案 1 :(得分:2)

我建议您使用以下延迟方法:

`
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的情况下使用它。

相关问题