Java计时器在随机时间后不会触发

时间:2013-01-10 18:43:32

标签: java swing timer

我有一个Java Swing计时器,它每秒更新一个标签。启动计时器后,标签每秒更新一次,一切正常。

然后,在从执行变为执行的随机时间间隔之后,标签停止更新。我在计时器更新代码中放了一个断点,它不再被触发。

我还将日志语句放在我通常会停止计时器的所有地方,但这些地方都没有被调用。

可能是什么问题?

编辑:以下是代码示例

        ActionListener actionListener = new ActionListener() {
        @Override
        public void actionPerformed(java.awt.event.ActionEvent arg0) {
            secondsRemaining--;
            System.out.println("Seconds remaining:" + secondsRemaining);

            //update the progressbar
            double initialLength = currentSettings.getLength()*60;
            double progress = (initialLength - secondsRemaining)/initialLength ;
            progressBarTime.setProgress(progress);

            //update the progress label
            progressPercentage.setText(((int)(progress * 100))  + "%");

            if (secondsRemaining >= 0) {
                updateTimeRemaining(secondsToString(secondsRemaining));
            } else {
                System.out.println(">0 seconds TIMER STOPPED with the number of seconds = " + secondsRemaining);
                treatmentTimer.stop();

                // set the status to Finished
                currentState = State.FINISHED;
            }
        }
    }

定时器初始化:

tTimer = new Timer(1000, actionListener);
tTimer.start();

奇怪的是,该程序在安装了JRE 7u7的PC上运行正常,即计时器成功更新了标签,但我尝试了两台7u10的计算机,并且这两个计时器停止发生问题。

2 个答案:

答案 0 :(得分:1)

可能抛出异常,使用try catch或Use UncaughtExceptionHandler进行跟踪。

答案 1 :(得分:0)

所以我认为我解决了这个问题。垃圾收集器正在删除计时器实例,原因不明。我放了一个

System.out.println("message");

在计时器的actionlistener中,以便它不会被垃圾回收。