黑莓 - 在指定时间后调用方法

时间:2013-04-30 09:44:58

标签: 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);          
      }    
  }

我需要与此相关的帮助。你能提供任何示例代码吗?

2 个答案:

答案 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