2013-04-30 34 views
3

創建會話後,我想在特定時間後再次調用方法& - 即5秒。Blackberry - 在指定時間後調用方法

但是當我調用一個方法時,它給了我一個錯誤。這裏是示例代碼。

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

將來,請使用** {} **按鈕,而不是**「**」按鈕來設置代碼的格式,它的可讀性更強,謝謝 – Nate 2013-04-30 10:05:17

回答

0

定時器和TimerTask Java類,這個例子提供你想要做什麼的一些見解:

http://javaprogramming.language-tutorial.com/2012/02/demonstrate-timer-and-timertask.html

+0

我會向你投訴,因爲我不認爲這個答案根本上是**錯誤**但是,一般來說,像這樣的簡單問題,最好是將代碼放入你的答案中,這樣其他人就不必通過其他在線搜索文檔,較慢的服務器以及有時會過時的鏈接。謝謝。 – Nate 2013-05-02 22:52:47

3

BlackBerry docs on the Timer class

一種設施線程安排用於未來的任務在後臺線程中執行。

因此,首先要明白的是,您在run()方法中執行的任何工作都將在後臺線程上運行。後臺線程不允許直接修改UI 。你可能通過這樣做得到IllegalStateException

或許這只是測試代碼,但是這個代碼

 BasicEditField b = new BasicEditField("Hello", "");  
     String a = b.getText();  
     Dialog.alert("Value " +a);  

是有點混亂。它會創建一個BasicEditField,但只會使用它來獲取傳遞給它的String值。只是實例化一個字段不會將其添加到屏幕上。因此,您需要撥打

add(b); 

此編碼字段後顯示此代碼。但是,這又會直接修改用戶界面。所以,你的情況,你可能只需要包裝與呼叫您的代碼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()方法之間的時間量。