java-Blackberry-在指定时间后调用方法
作者:互联网
创建会话后,我想再次调用方法&在特定时间(即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);
}
}
我需要与此相关的帮助.您可以提供任何示例代码吗?
解决方法:
从BlackBerry docs on the Timer class:
A facility for threads to schedule tasks for future execution in a background thread.
因此,首先要了解的是,您在run()方法中所做的任何工作都将在后台线程上运行.不允许后台线程直接修改UI.这样做可能会得到一个IllegalStateException.
也许这只是测试代码,但是这段代码
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毫秒后运行一次.如果希望它一次又一次地运行,请使用schedule(TimerTask,long,long)的版本takes three parameters.最后一个参数是每次调用计时器任务的run()方法之间的时间间隔.
标签:blackberry,java 来源: https://codeday.me/bug/20191123/2067029.html