编程语言
首页 > 编程语言> > java-Blackberry-在指定时间后调用方法

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