我是计时器的新手并且对它们不太了解。我的问题是我动态创建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他最后的项目它不起作用,因为我必须在运行中使任何变量最终,因此它的值不能改变! 请让我该怎么做!!谢谢
答案 0 :(得分:0)
我必须在运行中使任何变量成为最终,因此其值无法更改!
将这些变量转换为成员变量或将这些值封装在适当的类中,实例化该类并将该对象的引用提供给计时器任务。
即使引用是最终的,计时器任务仍然可以执行myTableController.destroyTable()
之类的操作。
答案 1 :(得分: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,并且你正在尝试访问不在其范围内的变量。
因此,如果您尝试访问的变量是本地(方法)变量,那么它们应该声明为最终,或者反过来将这些变量声明为即时(会员)变量就是我上面所做的。