int timerDelay = 1000; // 1000 msecs or 1 second
Timer timer = new Timer(timerDelay, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// code that needs to be repeated goes here
}
});
timer.setInitialDelay(0);
timer.start();
2条答案
按热度按时间mcdcgff01#
您声明:
我使用一个jframe作为gui,当我按下一个按钮和一个计时器时,它会从您在文本字段中输入的任何数字开始倒计时,并将其放入一个事件中。
我建议你考虑扔掉你正在问问题的代码,完全重新考虑你的方法。
如果您想在swing gui中创建并运行重复事件,请不要使用java.util.timer,因为您很容易遇到严重的swing线程问题。取而代之的是使用一个swing计时器,一个与swing配合良好的计时器,因为计时器的actionlistener中的所有代码都保证在swing事件线程上运行。
首先,您的代码可以如下所示:
虽然对于倒计时计时器,我不确定是否将初始延迟设置为0。相反,我会让它等一段时间。
lnxxn5zx2#
从javadoc中可以看到
scheduleAtFixedRate
方法接受TimerTask
作为第一个论点。您似乎试图传递一个名为timeleft()
,带有void
返回类型。如果需要以固定速率执行某些代码,那么需要创建
TimerTask
对象具有适当的run
执行并将其传递给scheduleAtFixedRate
.