0

我是计时器的新手,对它们了解不多。我的问题是我正在动态创建 2 个表,并且每当创建一个表时,都会为其分配一个 10 分钟的计时器。即用户必须在 10 分钟内填写该表,否则该表将被销毁。我尝试制作一个小演示,在其中打印内容代码是:

final Timer mytimers = new Timer(); 
Timer mytimers1 = new Timer();
 mytimers1 = new Timer();
final long delay1 = 5*1000; 
// mytimers = new Timer();
 mytimers.schedule(new TimerTask() {
Long current1 = System.currentTimeMillis();
 long check = current1;

      @Override
      public void run() {
        Long current = System.currentTimeMillis();
        System.out.println(current);
        System.out.println("\n");

       if((current1 + delay1)<current)

       {        

       System.out.println("mytimmer is about to stop");

       mytimers.cancel();


       }


      }

    }, 100, 1000);





 mytimers1.schedule(new TimerTask() {

      @Override
      public void run() {
        Long current = System.currentTimeMillis();
        System.out.println("in" + current);


      }
    }, delay1, 1000);

    }

但是当我尝试在最终项目中实现这个 int 时,它不起作用,因为我必须将运行中的任何变量设为 final,因此它的值不能更改!请让我该怎么办!!谢谢

4

2 回答 2

0

像这样做 :

class YourClass{
Timer mytimers = new Timer(); 
Timer mytimers1 = new Timer();
long delay1 = 5*1000; 

mytimers.schedule(new TimerTask() {
Long current1 = System.currentTimeMillis();
long check = current1;
      @Override
      public void run() {
        Long current = System.currentTimeMillis();
        System.out.println(current);
        System.out.println("\n");
       if((current1 + delay1)<current) {
       System.out.println("mytimmer is about to stop");
       mytimers.cancel();
       }
    }
}, 100, 1000);

mytimers1.schedule(new TimerTask() {

      @Override
      public void run() {
        Long current = System.currentTimeMillis();
        System.out.println("in" + current);
      }
    }, delay1, 1000);
    }

在您的情况下,您创建了匿名“具体”类,即 TimerTask,并且您试图访问不在其范围内的变量。

因此,如果您尝试访问的变量是本地(方法)变量,那么它们应该被声明为 final,或者相反的方式是将这些变量声明为我在上面所做的即时(成员)变量。

于 2012-07-19T12:48:15.993 回答
0

我必须将运行中的任何变量设置为 final ,因此它的值不能更改!

要么将这些变量转换为成员变量,要么将这些值封装在适当的类中,实例化该类并将对该对象的引用提供给计时器任务。

即使引用是最终的,计时器任务仍然可以执行诸如myTableController.destroyTable().

于 2012-07-03T07:37:07.107 回答