Java 计划固定费率拒绝工作

Java 计划固定费率拒绝工作,java,executorservice,Java,Executorservice,当我从ThreadMain类中删除df.calculateFreq()时,该代码会产生连续的声音并起作用。当我把它放在下面的genTone()方法中时,控制台只打印一次“test”,然后在没有它的情况下停止,代码工作正常。它是否没有足够的时间来处理额外的数据??谢谢,代码中没有错误 public ThreadMain() { audio = new AudioGenerator(10000); audio.createPlayer(); dF =

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

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

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();
    }
}
public void genTone(){
    try
        {
        System.out.println("test");
        dF.calculateFreq();
        tone = audio.getSineWave(noteDuration, 10000, 200);
        audio.writeSound(tone);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}