Задержка в цикле с использованием GWT Timer - PullRequest
3 голосов
/ 23 декабря 2011

Я работаю над 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());
   }
} 

Мне нужно открыть несколько окон, чтобы пользователь мог загрузить все файлы.

Я вызываю сервлет.

Как я могу ввести задержку в цикл до следующей итерации?

Ответы [ 2 ]

8 голосов
/ 23 декабря 2011

Вот решение, выполненное в том же стиле, что и Макс, используя свойство для сохранения состояния счетчика.У вас все еще есть цикл просто по-другому.

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);
}
0 голосов
/ 23 декабря 2011

Вам нужно позвонить, например, timer.scheduleRepeating(5000). Он будет вызывать метод run каждые 5 секунд. Вы можете написать свой метод run как без цикла for и сохранить состояние счетчиков в переменных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...