2014-03-02 206 views
0

我想要一個閃爍的小手電筒。我的問題是:計時器不想停止。要麼沒有反應,要麼應用程序崩潰。我搜索了幾個小時,所有我發現的是「timer.cancel()」 - 但它沒有幫助。計時器不會停止

我的代碼:

import java.util.Timer; 
import java.util.TimerTask; 

. 
. 
. 

    public void btn_slow(View view){ 
     final Camera.Parameters p = camera.getParameters(); 

    p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
    camera.setParameters(p); 

    Timer timer = new Timer(); 


    switch(flashon) { 
     case 1 :  timer.cancel(); 
         flashon = 0; 
          p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
          camera.setParameters(p); 
         break; 

     case 0:   timer.scheduleAtFixedRate(new TimerTask() { 
         @Override 
         public void run() { 

         timer2.schedule(new TimerTask() { 
         public void run() { 
          p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
          camera.setParameters(p); 
         } 
         }, 2*1000); 

         timer3.schedule(new TimerTask() { 
         public void run() { 
          p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
          camera.setParameters(p); 
         } 
         }, 1*1000); 
         } 

         }, 1*1000, 2*1000); 
         flashon = 1; 
         break; 
    } 

}  

希望你能幫助我。

03-02 22:12:51.379 25515-25616/com.example.app E/AndroidRuntime﹕ FATAL EXCEPTION: Timer-2 
java.lang.IllegalStateException: Timer was canceled 
     at java.util.Timer.scheduleImpl(Timer.java:561) 
     at java.util.Timer.schedule(Timer.java:459) 
     at com.example.app.Flashlight$2.run(Flashlight.java:245) 
     at java.util.Timer$TimerImpl.run(Timer.java:284) 

回答

0

即使計時器已停止計時器2和計時器3仍在運行且未取消。 添加此

timer2.cancel(); 
timer3.cancel(); 

那裏是

timer.cancel(); 

編輯

我只想用一個定時器去像這樣:

把這個作爲一個字段的類

private boolean running = false; 
    private Timer timer = new Timer(); 

那麼這段代碼的方法

boolean on = false; 

    final Camera.Parameters p = camera.getParameters(); 

    p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
    camera.setParameters(p); 

if(!running) 
    timer.scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() { 
     if(on) { 
      on = false; 
      p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
           camera.setParameters(p); 
     } 
     else { 
      on = true; 
      p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
           camera.setParameters(p); 
     } 

     } 
    }, 1*1000, 2*1000); 
} 
else { 
    timer.cancel(); 
} 
+0

我不得不在此之前,沒有任何改變。所以我想我可以嘗試'timer.cancel',因爲「大」的計時器。但是是的..仍然是同樣的問題 – QNikE

+0

@ QNIKE工作比你的switch語句更好嗎? – AbstractChaos

+0

我試了一下,現在的問題是:我可以啓動手電筒,閃爍等等,但是當我按下按鈕停止閃爍時,它開始眨眼非常「瘋狂」。如:半秒開,1秒關,1/4秒開,0.5秒關 - 如果你知道我的意思。所以事實上:並沒有幫助..... – QNikE