昨天问大家的一个类,现在又有新的业务需求了,我现在重新写了这个计划任务类,为方便大家解决,我把它写的简单一些吧(省略相关import)
现在的业务需求是,TextPing测试能否ping通服务器,其返回值是一个boolean值。每隔5分钟ping一次服务器,如果连续三次返回值为false,则触发发送警报的方法sendmassege(),如果服务器一直出现故障,则开始时每隔5分钟发送一条警报,在连续发送三次警报之后,就停止发送警报sendmassege(),现在我测试的时候,当我假设服务器一直ping不通,它每隔五分钟就要发一条警报信息,一直没有停止,我要得效果是在发送三条警报信息后就不要发送了,怎么实现呢?我的代码如下,看看大家能否帮我完善???
public class MyTask extends TimerTask {
   private boolean canLogin=true;//如果canLogin的值为false,则触发报警方法,所以初始化设为true;
    private boolean canPing=true;//是否能够ping通服务器的返回值
    private int couter=0;//如果ping不通,则计数器加1
   private int sendcouter=0;//记录发送警报信息次数
    public void run() {     //run() 方法参考昨天cyberpeng 红魔菜 给出的代码
         canPing = canReach();//测试是否能够ping通服务器,这个方法已经写好了。         if (canPing) {
            counter = 0;//如果ping通,则重设计数器为0,
        } else {
            if (++counter >= 3) {
                canLogin = false;
               sendmassege();//(++counter >= 3)触发发送警报信息的方法,这个方法已经写好了。
               sendcouter++;//发送一次信息,增加1;
               while(sendcouter>3)//如果发送信息三次以后,就不执行发送信息了
                       break;            }
        }
public static void main(String[] args) {
           Timer task=new Timer();
           long delay=2000;//程序在两秒中后执行
           long frequncy=1000*60*5;//每隔5分钟运行一次
        task.schedule(new MyTask(),delay ,frequncy);
}
}

解决方案 »

  1.   

    题目有问题吧,每隔5分钟ping一次服务器,如果连续三次返回值为false,则触发发送警报的方法sendmassege(),如果服务器一直出现故障,则开始时每隔5分钟发送一条警报,在连续发送三次警报之后,就停止发送警报sendmassege(),---------------
    怎么判定服务器一直出现故障呢?
      

  2.   

    当你发送三条警报信息后,你设置个条件判断下.返回boolean值.退出程序怎么样?
      

  3.   

      while(sendcouter>3)//如果发送信息三次以后,就不执行发送信息了
                           break;试试这样:     if(sendcouter>3)
              cancel();//取消此计时器任务
      

  4.   


    根据计数器couter计算啊,如果ping不通,如果++couter>3,那么就一直出现故障啊,只要有一次ping通,couter就为0了。
      

  5.   

    我的程序片段应该跟你说的差不多吧
    if (++counter >= 3) {
                    canLogin = false;
                   sendmassege();//(++counter >= 3)触发发送警报信息的方法,这个方法已经写好了。
                   sendcouter++;//发送一次信息,增加1;
                   while(sendcouter>3)//如果发送信息三次以后,就不执行发送信息了
                           break;            }
      

  6.   

    我刚看到这个帖子,能不能把整个程序都贴出来,或者发到里,我想学习一下,我一直没有
    用过time和timertask,感激不尽!