3

セッションを作成した後、特定の時間 (つまり 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);          
      }    
  }

これに関連するヘルプが必要です。サンプルコードを提供できますか?

4

2 に答える 2

3

Timer クラスの BlackBerry ドキュメントから:

バックグラウンド スレッドでの将来の実行のためにスレッドがタスクをスケジュールするための機能。

したがって、最初に理解しておくべきことは、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);          

次に、呼び出しは、タスクを5000 ミリ秒後に1 回Timer#schedule(TimerTask,long)だけ実行するようにスケジュールします。何度も実行したい場合は、3 つのパラメータを取るバージョンの を使用してください。最後のパラメーターは、タイマー タスクのメソッドの各呼び出し間の時間です。schedule(TimerTask,long,long)run()

于 2013-05-01T10:06:01.973 に答える
0

Timer および TimerTask Java クラスのこの例では、何をしたいのかについていくつかの洞察を提供します。

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

于 2013-04-30T14:48:48.050 に答える