gpt4 book ai didi

java - Blackberry - 在指定时间后调用方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:52:35 27 4
gpt4 key购买 nike

创建 session 后,我想在特定时间(即 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() 方法中所做的任何工作都将在后台线程上运行。不允许后台线程直接修改用户界面。这样做可能会导致 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 毫秒后运行一次。如果您希望它一次又一次地运行,请使用 takes three parametersschedule(TimerTask,long,long) 版本.最后一个参数是每次调用计时器任务的 run() 方法之间的时间量。

关于java - Blackberry - 在指定时间后调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16296831/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com