Можно ли остановить таймер из отдельного класса? - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь сбросить таймер, чтобы избежать нескольких его экземпляров.Чтобы достичь этого, я хочу остановить Timer из отдельного класса, примерно так:

public void Timer() 
{
    Timer timer = new Timer(); 
    long interval = (1000) ;
    timer.schedule( new TimerTask() 
    {
        public void run() 
        {
            // code //       
        }
    }, 0, interval);         
}

public void Stop() 
{
    // stop Timer //
}

Я чувствую, что это может быть достигнуто путем завершения Timer ();если не удастся остановить Таймер, я был бы очень признателен, если бы мне показали, как мне лучше всего завершить класс как можно более чисто.Спасибо.

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Я придумал довольно элементарное решение:

boolean stop;
public void Timer() 
{
    Timer timer = new Timer(); 
    long interval = (1000) ;
    timer.schedule( new TimerTask() 
    {
        public void run() 
        {
            if condition is met{
                execute
            }
            else if(stop == true){
                timer.cancel();
            }       
        }
    }, 0, interval);         
}

.
.
.

stop = true;
try {
    Thread.sleep(2000);
} catch (InterruptedException ex) {
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
stop = false;
Timer1();

По сути, логическое значение останавливает таймер, дает ему 2 секунды, чтобы убедиться, что нет перекрытия, а затем возвращается в false для безопасного сброса.Таймер.

0 голосов
/ 04 марта 2019

Newtimer.java

public class NewTimer{
   public Timer timer;
   public long interval;

public NewTimer(){
   if(instance == null){
      timer = new Timer(); 
      interval = (1000); 
   }
}
public void start() 
{
    timer.schedule( new TimerTask() 
    {
        public void run() 
        {
            // code //       
        }
    }, 0, interval);         
}

public void Stop() 
{
    // stop Timer //
}

В другом классе вы можете использовать этот класс объектов.

NewTimer newTimer = new NewTimer();

//Start timer
newTimer.start();

if(newTimer != null){
   //reinitialize
}

Проверьте, существует ли экземпляр таймера учебный класс.Если это произойдет, вы можете просто повторно инициализировать его.

...