在Timer内部使用变量

时间:2017-06-21 07:18:53

标签: java

我正在研究一个只在调用函数时才有打印时间的程序。我正在使用计时器来连续添加秒数。

    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 ++不起作用。有帮助吗?谢谢!

2 个答案:

答案 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]);

这样您就不会将数组重新分配给只更改其中内容的新对象