安排固定费率拒绝工作
Schedule fixed rate refusing to work
当我从 ThreadMain class 中删除 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);
}
public class DetermineFreq{
MainActivity main;
float accelX;
public void DetermineFreq() {
main = new MainActivity();
}
public void calculateFreq() {
accelX = main.getAccelX();
System.out.println(accelX);
}
}
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();
}
}
当我从 ThreadMain class 中删除 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);
}
public class DetermineFreq{
MainActivity main;
float accelX;
public void DetermineFreq() {
main = new MainActivity();
}
public void calculateFreq() {
accelX = main.getAccelX();
System.out.println(accelX);
}
}
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();
}
}