2016-07-03 41 views
3

此代碼產生連續的聲音,並在從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); 
    } 
} 

回答

3

的ScheduledExecutor可能是默默地拋出一個錯誤,並終止thread-會發生這種情況。

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