【问题标题】:Java Thread() sleep issuesJava Thread() 睡眠问题
【发布时间】:2015-01-28 18:35:03
【问题描述】:

我正在尝试将节拍器添加到程序中,这是它的类

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 文件的类。

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

【问题讨论】:

    标签: java multithreading sleep


    【解决方案1】:

    你正在做整数除法

    double delay = 60/tempo*1000;
    

    因此,如果您将 tempo 设置为 100,则 60/100 为 0。对于大于 60 的值,您的 sleep 将始终为 0

    你应该试试:

    double delay = 60.0 / tempo * 1000.0;
    

    【讨论】:

    • 谢谢。将在 7 分钟内设置为答案
    【解决方案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。

    ;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 2016-10-26
      • 2014-07-29
      相关资源
      最近更新 更多