是否可以从单独的班级停止计时器?

时间:2019-03-04 18:58:38

标签: java swing class timer timertask

我正在尝试重置一个计时器,以避免出现多个实例。为此,我想从一个单独的类停止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()来实现;如果无法停止Timer,那么我将非常高兴地向我展示如何最好地干净地终止该类。谢谢。

2 个答案:

答案 0 :(得分:0)

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
}

检查是否存在 timer 类的实例。如果是这样,您可以重新初始化它。

答案 1 :(得分:0)

我设计了一个非常基本的解决方案:

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以安全地重置计时器。