2011-12-23 3 views
3

나는 GWT + 자바에서 일하고 있습니다.지연 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

여기에는 mak가 카운터의 상태를 유지하기 위해 속성을 사용하여 제안하는 것과 같은 스타일의 솔루션이 있습니다. 당신은 여전히 ​​다른 방식으로 루프를 가지고 있습니다.

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 타이머를 두 번 예약 할 수 없습니다. timer.scheduleRepeating (2000) 호출은 내부적으로 첫 번째 일정 (500)을 실행 취소하는 cancel()을 호출합니다. – djjeck

+0

@ djjeck 당신 말이 맞습니다. 대답이 업데이트됩니다. 고맙습니다. –

+0

+1 좋은 직장. 이것은 오늘 나를 도왔다. –

0

예를 들어 timer.scheduleRepeating(5000)으로 전화해야합니다. 그것은 5 초마다 run 방법을 호출합니다. run 메소드를 for 루프없이 작성하여 카운터의 상태를 변수에 저장할 수 있습니다.

+0

안녕하세요. 빠른 답장을 보내 주셔서 감사합니다. 내 게시물을 편집했습니다. 2 초 지연됩니다. 목록 크기까지 실행해야하므로 루프를 썼습니다. –

+0

좋습니다. 힌트를 얻었지만 언제 타이머를 중지해야합니까? 그것에 대한 힌트를 제공 할 수 있습니까 –

관련 문제