创建会话后,我想再次调用一个方法&在特定时间后再次 - 即5秒
但是当我调用一个方法时,它会给我一个错误。这是示例代码。
public class RunFunction extends MainScreen{
public RunFunction()
{
//Call Function again and again after 5 sec
setTitle("Timer");
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
BasicEditField b = new BasicEditField("Hello", "");
String a = b.getText();
Dialog.alert("Value " +a);
}
}, 5000);
}
}
我需要与此相关的帮助。你能提供任何示例代码吗?
答案 0 :(得分:3)
来自BlackBerry docs on the Timer class:
线程的工具,用于在后台线程中安排将来执行的任务。
因此,首先要理解的是,您在run()
方法中所做的任何工作都将在后台线程上运行。不允许后台线程直接修改UI 。你这样做可能会获得IllegalStateException
。
也许这只是 test 代码,但是这段代码
BasicEditField b = new BasicEditField("Hello", "");
String a = b.getText();
Dialog.alert("Value " +a);
有点令人困惑。它会创建一个BasicEditField
,但只使用它来获取传递给它的String
值。只是实例化一个字段不会将其添加到屏幕上。所以,你需要打电话
add(b);
在此代码之后显示编辑字段。但同样,这将直接修改UI。因此,在您的情况下,您可能只需要通过调用UiApplication#invokeLater()
来包装代码:
timer.schedule(new TimerTask() {
public void run() {
// this code executed on background thread -> not UI safe!
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
// this code safely executed on UI thread
BasicEditField b = new BasicEditField("Hello", "");
add(b);
String a = b.getText();
Dialog.alert("Value " +a);
}
});
}
}, 5000);
接下来,调用Timer#schedule(TimerTask,long)
只会安排您的任务在5000毫秒后运行一次。如果您希望它一次又一次地运行,请使用takes three parameters schedule(TimerTask,long,long)
的版本。最后一个参数是每次调用计时器任务的run()
方法之间的时间量。
答案 1 :(得分:0)
关于Timer和TimerTask java类的这个例子提供了一些关于你想要做什么的见解:
http://javaprogramming.language-tutorial.com/2012/02/demonstrate-timer-and-timertask.html