使用GWT定时器延迟循环

时间:2011-12-23 12:19:17

标签: java gwt

我正在研究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());
   }
} 

我需要打开几个窗口以允许用户下载所有文件。

我正在调用Servlet。

如何在循环中引入延迟直到下一次迭代?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

例如,您需要致电timer.scheduleRepeating(5000)。它将每5秒调用run方法。您可以将run方法编写为for for loop,并将计数器的状态保存在变量