我使用此代码制作并显示时钟倒计时
LabelField time;
long mille=0;
Timer timer=null;TimerTask task=null;
public Timerscreen() {
mille=1000*60*1;
time=new LabelField();
add(time);
timer=new Timer();
task=new TimerTask() {
public void run() {
synchronized (UiApplication.getEventLock()) {
if(mille!=0){
SimpleDateFormat date=new SimpleDateFormat("mm:ss") ;
System.out.println("================="+date.formatLocal(mille)+"====================="+Thread.activeCount());
time.setText(date.formatLocal(mille));
mille=mille-1000;
}else{
time.setText("00:00");
mille=1000*60*1;
timer.cancel();
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
Dialog.inform("Time expaired");
}
});
}
}
}
};
timer.schedule(task,0, 1000);
当我按下一个新屏幕时,我希望这个时钟仍然显示并倒计时。
我怎样才能做到这一点 ?
最佳答案
无法添加单个 ui field
或 manager
一分为二 manager
s 或 screen
s.. 每个用户界面 field
或 manager
必须最多有一个父级( screen
或 manager
)。
所以如果你需要一个 LabelField
它将在不同的 screen
上保持和显示时间s,那么你只需要实现某种监听器来监听时间的变化......并且对于每一个变化你都必须更新 screen
和 LabelField
与新值。您已经实现了 TimerTask
这将为您提供更新的数据。
[编辑 - 稍后添加]
您可以检查以下代码,未经测试,但这样的事情将解决您的问题...
class MyTimerUtil {
TimerListener listener = null;
public MyTimerUtil() {
}
public void setTimerListener(TimerListener listener) {
this.listener = listener;
}
public void startTimer() {
final int interval = 1000;
Timer timer = new Timer();
TimerTask task = new TimerTask() {
public void run() {
// add your codes..
// notify others
if (listener != null) {
listener.timeChanged();
}
}
};
timer.schedule(task, 0, interval);
}
}
interface TimerListener {
public void timeChanged();
}
class ScreeA extends MainScreen implements TimerListener {
public void timeChanged() {
// add Codes here on time changed event
}
}
在上面的代码片段中,您可以实现
TimerListener
任何屏幕实例中的界面,并且可以通过 MyTimerUtil
获取每次更改事件的更新类(class)。为此,您必须设置 ScreeA
的实例。 (实现 TimerListener
)通过 setTimerListener()
的MyTimerUtil
类(class)。还需要通过调用
startTimer()
来启动定时器方法。
关于blackberry - 如何在 Blackberry 上显示整个应用程序的时钟倒计时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8531930/