2012-03-12 2 views
3

사용자가 일정 시간 (10 초) 기다리도록하고 싶습니다. JSP 또는 서블릿에서 META 태그 <META HTTP-EQUIV="Refresh" CONTENT="3">을 사용한다는 것을 알고 있습니다. Swing에서 사용자가 잠시 기다릴 수있는 방법이 있습니까? 나는 스윙을 사용하고있다. 사용자가 일정 시간 동안 기다리도록하고 데이터베이스에서 가져올 일부 정보를 표시하려고합니다. 스윙을 통해 가능합니까?스윙을 사용하여 사용자 대기하기

+0

일정 기간 동안 일부 컨트롤을 채우거나 전체 양식을 다시로드하려고합니까? 어떤 방식 으로든 스레드를 사용하면 10 초 후에 내용을로드 할 수 있습니다. –

답변

5

javax.swing.Timer을 사용할 수 있습니다. 예를 들어 :

enter image description here

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.SwingUtilities; 
import javax.swing.Timer; 

public class SimpleTimer extends JFrame implements ActionListener 
{ 
    private JLabel label; 
    private Timer timer; 
    private int counter = 10; // the duration 
    private int delay = 1000; // every 1 second 
    private static final long serialVersionUID = 1L; 

    public SimpleTimer() 
    { 
     super("Simple Timer"); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(300, 65); 
     label = new JLabel("Wait for " + counter + " sec"); 
     getContentPane().add(label); 
     timer = new Timer(delay, this); 
     timer.setInitialDelay(0); 
     timer.start(); 
     setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       new SimpleTimer(); 
      } 
     }); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     if(counter == 0) 
     { 
      timer.stop(); 
      label.setText("The time is up!"); 
     } 
     else 
     { 
      label.setText("Wait for " + counter + " sec"); 
      counter--; 
     } 
    } 
} 
1

스레드로 시도 했습니까?

Thread.sleep(10000); 

을 사용하면 쉽게 확인할 수 있습니다. 더 많은 정보를 얻을 수 있습니다 here

3

이전에, HTTP 서버는 HTTP 클라이언트 '이벤트를 보낼 수없는 WebSocket을에;! 상호 작용은 기본적으로 요청 - 응답이었습니다. 많은 응용 프로그램이 (클라이언트 쪽) 폴링 방식을 사용하여이 문제를 해결합니다. 새로 고침 메타 태그는 폴링을 구현하는 한 가지 방법입니다.

스윙은 매우 다릅니다. 이벤트의 힘이 충분합니다. 따라서 사용자가 미리 결정된 시간 동안 대기하게 만드는 아이디어는 일반적으로 잘못된 상호 작용입니다. 어떤 종류의 게임/퀴즈/애니메이션은 몇 가지 예외이며, 단순히 기다리는 것이 의미가 있습니다.) 결과가 계산/수신되지 않은 상태에서 기능적으로 반응하는 Swing GUI를 디자인해야합니다. 결과를 사용할 수있게되면 모델을 업데이트하고 모델이 변경되었음을 알리는 이벤트을 발동하십시오.

모델 자체는 필요에 따라 백그라운드 계산, 폴링 등을 수행 할 수 있습니다. 그 코드는 특정 스윙이 아닙니다. 해당 측면에 대한 도움이 필요하면 스택 오버플로에서 개별적으로 해당 내용을 찾고/묻는 것이 좋습니다.

마지막으로 스윙 스레드에서 잠자기하면 UI가 응답하지 않습니다. 그리고 관련 메모에서 모델에 의해 시작된 모든 이벤트는 Swing 이벤트 스레드에 대기열에 있어야합니다. 그 방법에 대해서는 SwingUtilities.invokeLater(...)을 참조하십시오.

+0

멋진 요약 :-) – kleopatra

관련 문제