2016-06-01 7 views
1

Ich habe diesen Code, der im Grunde einen benutzerdefinierten Timer für meine Anwendung bietet.Wie implementieren isTimerRunning() für diese Klasse

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    
     } 
    } 
} 

Nun stellt sich das Problem, dass ich eine isRunning() Methode in SMSFirewallTimer wollen, die mir sagen, dass, wenn der Timer noch läuft oder nicht, und es sollte auch Timeout im Auge behalten.

Wenn ich in dieser Klasse nur eine boolean als isTimer erklären es hält nur gut, wenn wir cancelTimer() verwenden, aber es wird nicht kommen, zu wissen, wenn Timer abgelaufen ist, wie seine anderen geplanten Verfahren new Timeout(string).

Antwort

1

Timeout ist eine innere Klasse von SMSFirewallTimer was bedeutet, dass jede Instanz SMSFirewallTimer auf eine spezifische Instanz von SMSFirewallTimer gebunden ist, und das ist hat Zugang zu seinen Feldern und Methoden.

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

mit

 cancelTimer(); //Terminate the timer thread    

im run Methode von Timeout:

Es sollte ersetzen ausreichend sein.

1

Versuchen Sie, diese

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    
     } 
    } 
} 

Sie können auch Referenz für Timeout halten, wenn Sie den Zugriff von Ihrem Timeout auf Ihre SMSFirewallTimer isRunning Feld nicht haben wollen.

+0

Es funktioniert gut, danke .... – piyushj

Verwandte Themen