⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.java

📁 该程序是用jbuilder制作
💻 JAVA
字号:
package myoven.timer;

import java.util.*;

public class Timer implements Runnable{
  Vector Observers_TimerOn; //预定者计时开始事件的观察者集合
  Vector Observers_TimerOff; //预定者计时结束事件的观察者集合
  Vector Observers_TimerExpired; //预定者计时开始事件的观察者集合
  private int time_remaining;
  private static Timer instance;
  Thread timeThread;//计时线程
  final int TIMEINTERVAL=100;//计时单位

  boolean isOn;//标志自身计时状态 isOn=true;为计时器处于工作状态
  boolean isOk;
  //用于判断外界条件(比如门的闭和与否,可以扩展到其他外界条件)是否允许计时器计时,一旦计时即微波炉处于正常工作状态.
  //比如在此例中用来对门是否关闭,门关闭,将set IsOk=true; or门打开 set IsOk=false;
  public static Timer getInstance(){
    if(instance==null)
      instance=new Timer();
    return instance;
  }
  public Timer() {
    Observers_TimerOn=new Vector();
    Observers_TimerOff=new Vector();
    Observers_TimerExpired=new Vector();
    time_remaining=0;
    isOn=false;
    isOk=true;//在此例中,初始时门处于关闭条件,对于timer来说运行之外部条件成立,所以=true;
  }

  public int getTime_remaining(){
    return time_remaining;
  }
  public boolean getIsOn(){
    return isOn;
  }
  public boolean getIsOk(){
    return isOk;
  }
  public void setIsOk(boolean isOk){
    this.isOk=isOk;
  }
/*
  public void setIsOn(boolean isOn){
    this.isOn=isOn;
  }
*/
  public void start() {
    if (timeThread == null) {
          timeThread = new Thread(this);
          timeThread.start();
          System.out.println("timeThread == null");
    }
    else
      System.out.println("timeThread != null");
  }
  public void run() {
        while (timeThread != null && time_remaining>0 && isOn && isOk) {
          time_remaining=time_remaining-1;//时间流逝...
          System.out.println(time_remaining);
         try {
               timeThread.sleep(TIMEINTERVAL);//计时
            } catch (InterruptedException e){}
         }
         if(isOn && isOk){
          //isOn==true:说明是超时-计时已满而不是因为按取消导致烹饪终止
          //isOk==true:说明是超时-计时已满而不是因为外界条件破坏而导致(如此例中开了门)
           timeExpired();//超时
           timeThread=null;
         }
         else{//是按取消按钮而导致烹饪终止
            off();//取消按钮,关闭timer
            timeThread=null;
         }
  }

  public void add60secToTime(){
    if(isOk){
      time_remaining += 60;
    }
    System.out.println("time_remaining:"+time_remaining);
  }

  public void setTimeToZero(){
    time_remaining=0;
  }
  public void timeExpired(){//通知所有预定计时超时事件的观察者
    for(int i=0;i<Observers_TimerExpired.size();i++){
      ((TimerObserver)Observers_TimerExpired.elementAt(i)).recieveTimerNotification();
    }
  }
  public void on(){//通知所有预定计时开始事件的观察者
    isOn=true;
    for(int i=0;i<Observers_TimerOn.size();i++){
      ((TimerObserver)Observers_TimerOn.elementAt(i)).recieveTimerNotification();
    }
  }
  public void off(){//通知所有预定计时结束事件的观察者
    isOn=false;
    for(int i=0;i<Observers_TimerOff.size();i++){
      ((TimerObserver)Observers_TimerOff.elementAt(i)).recieveTimerNotification();
    }
  }
  public void subscribeTimerOn(Object obt){
    Observers_TimerOn.add(obt);
  }
  public void unsubscribeTimerOn(Object obt){
    Observers_TimerOn.remove(obt);
  }
  public void subscribeTimerOff(Object obt){
    Observers_TimerOff.add(obt);
  }
  public void unsubscribeTimerOff(Object obt){
    Observers_TimerOff.remove(obt);
  }
  public void subscribeTimerExpired(Object obt){
    Observers_TimerExpired.add(obt);
  }
  public void unsubscribeTimerExpired(Object obt){
    Observers_TimerExpired.remove(obt);
  }


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -