2016-06-01 6 views
1

У меня есть этот код, который в основном предоставляет пользовательский таймер для моего приложения.Как implemet isTimerRunning() для этого класса

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

import org.apache.log4j.Logger; 


public class SMSFirewallTimer { 
    private static Logger logger = Logger.getLogger(SMSFirewallTimer.class); 
    Timer timer; 
    String timerId; 

    public SMSFirewallTimer(int seconds, String string) { 
     timer = new Timer(); 
     timerId = string; 
     logger.debug("SMSFirewallTimer: timer started for: "+seconds +"seconds"); 
     timer.schedule(new Timeout(string), seconds*1000); 
    } 

    public void cancelTimer() 
    { 
     this.timer.cancel(); 
     logger.debug("SMSFirewallTimer: Cancelling timer for : " + this.timerId); 
    } 

    class Timeout extends TimerTask { 
     private String string; 
     public Timeout(String string) { 
      this.string = string; 

     } 
     @Override 
     public void run() { 
      logger.debug("SMSFirewallTimer: Time's up! for: " + this.string); 
      timer.cancel(); //Terminate the timer thread    
     } 
    } 
} 

Теперь возникает проблема, что я хочу способ isRunning() в SMSFirewallTimer, который сообщит мне, что если таймер еще работает или нет, и он должен также иметь в виду, тайм-аут.

Если я просто объявить булево как isTimer в этом классе только держит хорошо, если мы используем cancelTimer(), но это не придет, чтобы знать, если таймер истек, а его другой запланированном метод new Timeout(string).

ответ

1

Timeout является внутренним классом SMSFirewallTimer, что означает, что каждый экземпляр SMSFirewallTimer привязан к конкретному экземпляру SMSFirewallTimer и что это имеет доступ к своим полям и методам.

Это должно быть достаточно, чтобы заменить:

 timer.cancel(); //Terminate the timer thread    

с

 cancelTimer(); //Terminate the timer thread    

в run методом Timeout.

1

Попробуйте

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

import org.apache.log4j.Logger; 


public class SMSFirewallTimer { 
    private static Logger logger = Logger.getLogger(SMSFirewallTimer.class); 
    Timer timer; 
    String timerId; 
    private Boolean isRunning; 


    public SMSFirewallTimer(int seconds, String string) { 
     timer = new Timer(); 
     timerId = string; 
     logger.debug("SMSFirewallTimer: timer started for: "+seconds +"seconds"); 
     isRunning = true; 
     timer.schedule(new Timeout(string), seconds*1000); 
    } 

    public void cancelTimer() 
    { 
     isRunning = false; 
     this.timer.cancel(); 
     logger.debug("SMSFirewallTimer: Cancelling timer for : " + this.timerId); 
    } 

    public boolean isRunning() { 
     return isRunning; 
    } 


    class Timeout extends TimerTask { 
     private String string; 
     public Timeout(String string) { 
      this.string = string; 

     } 
     @Override 
     public void run() { 
      logger.debug("SMSFirewallTimer: Time's up! for: " + this.string); 
      isRunning = false; 
      timer.cancel(); //Terminate the timer thread    
     } 
    } 
} 

Также вы можете сохранить ссылку на тайм-аут, если вы не хотите иметь доступ с вашего тайм-аута на ваш SMSFirewallTimer поле isRunning.

+0

Он отлично работает, спасибо .... – piyushj

 Смежные вопросы

  • Нет связанных вопросов^_^