我正试图在一个已经存在的公共类中实现一个倒计时器,我有几个问题。
概述:我希望在程序中有一个计时器,当程序初始化后,计时器从60秒开始计数。
如果计时器达到零,程序就退出。
如果用户在60秒时间帧内遇到某些参数,则定时器重置为60,呈现一组新的参数,并再次开始倒计时。它应该能够做到无限次,直到用户在60秒内无法满足参数。
计时器也会有某种形式的图形用户界面表示,很可能是数字倒计时或JProgressBar。
我是半新手(~3个月)编程,自学,仍然学习很多(所以要温和) :)
我的问题是:
谢谢你的帮助。如果你需要看代码,我可以找到一些。
编辑:只是为了一些澄清/背景:这是一个计时赛车视频游戏,我正在努力发展我的技能,作为一个程序员。这个想法是一个球员有60秒的时间来完成一圈。如果玩家成功地完成了一圈,计时器重置到60秒,轨道改变稍微困难一些。游戏运行,直到玩家无法在60秒内完成一圈由于困难。游戏记录圈数作为高分,并询问玩家是否愿意再试一次。
发布于 2011-09-19 15:34:17
如果我是你,我会用:
zero;
AtomicInteger变量;
decrementAndGet()则每1s唤醒一个变量,将结果与零进行比较,如果结果是AtomicInteger,则终止应用程序--这个线程也会每1s唤醒一次以重新绘制GUI --这里最好的方法取决于您的GUI框架。最后,每当您需要将计数重新设置为60时,只需从任何线程调用set(newValue)。
计时器线程的run()方法可以很简单,如:
for (;;) {
if (counter.decrementAndGet() <= 0) {
// TODO: exit the app
}
Thread.sleep(1000);
}我认为这比尝试管理多个Timer对象容易得多。
发布于 2011-09-19 15:37:49
您可以使用java.util.Timer来安排方法的执行,然后在满足要求时取消它。
如下所示:
timer = new Timer();
timer.schedule(new Task(), 60 * 1000);然后像这样创建一个类来处理时间表:
class Task extends TimerTask {
public void run() {
System.exit(0);
}
}如果满足了要求,则执行此操作以阻止其执行:
timer.cancel();发布于 2011-09-19 15:54:09
如果您需要更新GUI以更好地使用SwingWorker http://en.wikipedia.org/wiki/SwingWorker,我将编写如下所示:
SwingWorker<String, Integer> timer = new SwingWorker<String, Integer>() {
Integer timer=60;
@Override
protected String doInBackground() throws Exception {
//update guiModel
//label.setText(timer.toString());
while(timer>0){
Thread.sleep(1000);
timer--;
}
return null;
}
@Override
public void done(){
System.exit(0);
}
};
JButton restart = new JButton(){
{
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
timer.cancel(true);
timer.execute();
}
});
}
};https://stackoverflow.com/questions/7473348
复制相似问题