我正在研究一个只在调用函数时才有打印时间的程序。我正在使用计时器来连续添加秒数。
Timer gameTimer = new Timer ();
TimerTask time = new TimerTask() {
int sec = 0;
public void run()
{
sec++;
}
};
gameTimer.scheduleAtFixedRate(time, 1000, 1000);
但是,我不能在run()之外使用变量sec,所以我可以打印它。我试图将sec放在TimerTask之外但当然sec ++不起作用。有帮助吗?谢谢!
答案 0 :(得分:3)
只需创建自己的界面即可扩展原始界面。 https://docs.oracle.com/javase/tutorial/java/IandI/nogrow.html
interface CustomTimerTask extends TimerTask {
public int getTicks();
}
CustomTimerTask time = new CustomTimerTask () {
int sec = 0;
@Override
public void run()
{
sec++;
}
@Override
public synchronized int getTicks() {
return sec;
}
};
System.out.println("The time passed is: " + time.getTicks());
请确保您已同步,因为您现在正在使用两个线程。
答案 1 :(得分:2)
由于只有最终变量可以在匿名类中访问,但是下面的黑客攻击你可以实现你想要的。
final int [] result = new int[1]; // Create a final array
TimerTask time = new TimerTask() {
int sec = 0;
public void run()
{
sec++;
result[0] = sec;
}
};
// Now Print whenver you want it
System.out.println(result[0]);
这样您就不会将数组重新分配给只更改其中内容的新对象