首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计时器不会停止

计时器不会停止
EN

Stack Overflow用户
提问于 2014-03-03 05:05:51
回答 1查看 443关注 0票数 1

我想要一个闪烁的小手电筒。我的问题是:计时器不想停止。要么什么都不发生,要么应用程序崩溃。我找了几个小时,所有我找到的是“timer.cancel()”-但它没有帮助。

我的代码:

代码语言:javascript
复制
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;
    }

}    

希望你能帮助我。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2014-03-03 05:10:09

即使计时器已经停止,timer2和timer3仍然在运行,并且没有取消。添加这个

代码语言:javascript
复制
timer2.cancel();
timer3.cancel();

哪里有

代码语言:javascript
复制
timer.cancel();

编辑

我只会使用一个计时器,如下所示:

将其作为字段放在类中

代码语言:javascript
复制
   private boolean running = false;
   private Timer timer = new Timer();

然后该方法中的代码

代码语言:javascript
复制
    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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22133464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档