2011-12-23 7 views
3

私はGWT + JAVAで作業しています。GWTタイマを使用したループの遅延

私はすべてのファイルをダウンロードするユーザーを許可するように複数のウィンドウを開く必要があり

static int DELAY = 1000; 

private void downloadAttachments(final List<String> ftIdList) 
{ 
    try 
    { 
     Timer timer = new Timer() 
     { 
     @Override 
     public void run() 
     { 
      int cnt = 1; 
      for (String url: ftIdList) 
      { 
       String windowName = "win" + cnt; 
       Window.open(url, windowName, ""); 
       cnt++; 
       scheduleRepeating(DELAY*2); 
      } 
      cancel(); 
     } 
     }; 
     timer.run(); 
    } 
    catch (Throwable exc) 
    { 
     Window.alert(exc.getMessage()); 
    } 
} 

以下のように私は、GWTのコードの部分を持っています。

私はサーブレットを呼び出しています。

どのようにして次の反復までループに遅延を導入できますか?

答えて

8

ここでは、maksがカウンタの状態を保持するためにプロパティを使用することによって提案するのと同じスタイルのソリューションです。あなたはまだ別の方法でループを持っています。

private void downloadAttachments(final List<String> ftIdList) { 
    final int size = ftIdList.size(); 

    Timer timer = new Timer() { 

     private int counter = 0; 

     @Override 
     public void run() { 
     if (counter == size) { 
      cancel(); 
      return; 
     } 
     String url = ftIdList.get(counter); 
     String winName = "win" + counter; 
     Window.open(url, winName, ""); 
     counter++; 
     } 
    }; 
    timer.scheduleRepeating(2000); 
} 
+2

GWTタイマーは、少なくとも最初のスケジュールされたイベントが発生する前に2回スケジュールすることはできません。 timer.scheduleRepeating(2000)を呼び出すと、内部的にcancel()が呼び出され、最初のスケジュール(500)が取り消されます。 – djjeck

+0

@djjeckあなたは正しいです。答えが更新されます。ありがとうございました。 –

+0

+1素晴らしい仕事。これは今日私を助けました。 –

0

たとえば、timer.scheduleRepeating(5000)に電話する必要があります。それはrunメソッドを5秒ごとに呼び出します。あなたはループなしで実行メソッドを書くことができ、カウンタの状態を変数に保存することができます

+0

こんにちはmaks ..すばやくお返事ありがとうございます。私は自分の投稿を編集しました。私は2秒遅れています。私はリストのサイズまで実行する必要があり、それは私がループを書いた理由です –

+0

Ok ..私はヒントを得た..しかし、いつ私はタイマーを停止する必要があります。そのことに関するヒントを提供することはできます –

関連する問題