我的业务逻辑是这样的,写了一个测试连接服务器的类,里面有一个测试是否可以连接服务器的方法,
要求每隔5分钟ping一次服务器,如果连续ping三次不通,则触发一个发出警报的方法。
假设我已将写了一个测试能否ping通服务器的类TextPing,它的一个方法canReach是一个返回能否ping通的boolean值。
如果ping不通,则计数器couter记为1,如果接着第二次ping不通,couter记为2,如果接着第三次ping不通,则couter记为3,并且设置canlong为false,因为canlong为false
,这样就触发了警报方法,但是如果couter为2或为1的情况下再连续ping一次通的话,就要设置couter为0了,假设发出警报的方法我已经写好了,但是被卡住了,大家可以帮忙吗?
我的代码如下(省略相关import),
public class TestTimeTask extends TimerTask{
private boolean canLogin=true;//如果canLogin的值为false,则触发报警方法,所以初始化设为true;
private boolean canPing=true;//是否能够ping通服务器的返回值
private int couter=0;//如果ping不通,则计数器加1
private TextPing failHandle=new TextPing();//假设这个类我已经写好了,这个是测试ping服务器的类
 public void run() {
 canPing=failHandle.canReach();//测试是否能够ping通服务器
 if(!canLogin)//如果ping不通,计数器加1;但是在连续的三次ping中,又一个ping通的话,计数器couter=0,如何实现???
 couter++;
 } }

解决方案 »

  1.   


        public void run() {
            canPing = failHandle.canReach();
            if (canPing) {
                counter = 0;
            } else {
                if (++counter >= 3) {
                    canLogin = false;
                }
            }
        }
      

  2.   

    给个参考:public class TestTimerTask extends TimerTask {  private int counter = 0;
      private TextPing failHandle = new TextPing();  public void run() {
        if (!failHandle.canReach()) {
          if (counter == 2) {
            // 第三次ping不通->报警
          } else {
            counter++;// 未达到3次加1
          }
        } else {
          counter = 0;
        }
      }}
      

  3.   

    一楼正解!
    其实也可以利用TimerTaskimport java.util.*;public class StandThread extends Thread
    {
        private  AtTimeTask task;
        private Timer time=new Timer();
        public StandThread()
        {
        }
        public void run()
        {
              //Timer time=new Timer();
              task=new AtTimeTask();
              time.schedule(task,new Date(),3000);
        }
    }
    而在AtTimeTask里则有一个public void run()方法,则是你要执行的业务!
      

  4.   

    如果我没有理解错需求的话。。public class TestTimeTask extends TimerTask
    {    private boolean canLogin = true; //如果canLogin的值为false,则触发报警方法,所以初始化设为true;    private boolean canPing  = true; //是否能够ping通服务器的返回值    private int     couter   = 0;   //如果ping不通,则计数器加1    //private TextPing failHandle = new TextPing(); //假设这个类我已经写好了,这个是测试ping服务器的类    public void run()
        {
            for (int i = 0; i < 3; i++)
            {
                try
                {
                    //canPing = failHandle.canReach();//测试是否能够ping通服务器
                }
                catch (Exception e)
                {
                    //异常..
                }
                if (canPing)
                {
                    //ping通了,couter计数归0
                    couter = 0;
                    break;
                }
                else
                {
                    //累计
                    couter++;
                }
            }
            if (couter == 3)
            {
                //3次没ping通,报警..
                canLogin = false;
                //do someting.......?
            }    }    public static void main(String[] args)
        {
            
            //在程序初始化的时候定时,找个地方放就可以
            TestTimeTask task = new TestTimeTask();
            Timer testTimer = new Timer("TestPingTimer");
            // 5分钟
            testTimer.schedule(task, new Date(), (long) (5 * 60 * 1000));
        }}
      

  5.   

    恩…………如果是1.4的JDK的话,定时任务可以用到java.util.timer这个类…………具体使用方法你可以看API…………
    这个类是在JDK1.3就封装了进去的…………其实很简单的…………
      

  6.   

    jdk自己有Timer
    还有开源包quartz
      

  7.   

    public class TestTimeTask extends TimerTask{
        private boolean canLogin=true;//如果canLogin的值为false,则触发报警方法,所以初始化设为true;
        private boolean canPing=true;//是否能够ping通服务器的返回值
        private int couter=0;//如果ping不通,则计数器加1
        private TextPing failHandle=new TextPing();//假设这个类我已经写好了,这个是测试ping服务器的类
         public void run() {
             canPing=failHandle.canReach();//测试是否能够ping通服务器
             if(!canPing)
                 couter++;
            else
                couter=0;        if(couter==3){
                canLogin=false;
                doyourFunction()....
             }
     }