【问题标题】:Schedule fixed rate refusing to work安排固定费率拒绝工作
【发布时间】:2016-07-03 20:23:40
【问题描述】:

当我从 ThreadMain 类中删除 df.calculateFreq() 时,此代码会产生连续的声音并起作用。当我把它放在控制台下方的 genTone() 方法中时,控制台只打印一次“测试”,然后在没有它的情况下停止,代码工作正常。它没有足够的时间来处理额外的数据吗?谢谢,代码没有错误。

public ThreadMain() {
        audio = new AudioGenerator(10000);
        audio.createPlayer();

        dF = new DetermineFreq();

        exec = Executors.newSingleThreadScheduledExecutor();
        exec.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                //RUN FUNC every 20 millisecond
                genTone();

            }
        }, 0, 50, TimeUnit.MILLISECONDS);
    }

    public void genTone(){
        System.out.println("test");
        dF.calculateFreq();   <--- this
        tone = audio.getSineWave(noteDuration, 10000, 200);
        audio.writeSound(tone);
    }

public class DetermineFreq{
    MainActivity main;

    float accelX;

    public void DetermineFreq() {
        main = new MainActivity();
    }

    public void calculateFreq() {
        accelX = main.getAccelX();
        System.out.println(accelX);
    }
}

【问题讨论】:

    标签: java executorservice


    【解决方案1】:

    ScheduledExecutor 可能会默默地抛出一个错误,并终止线程——这确实发生了。

    将 genTone() 方法的内容包装在 try catch 中并打印捕获到的任何异常的堆栈跟踪。

    public void genTone(){
        try
            {
            System.out.println("test");
            dF.calculateFreq();
            tone = audio.getSineWave(noteDuration, 10000, 200);
            audio.writeSound(tone);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-09
      • 2011-06-19
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多