2011-12-17 2 views
0

안녕하세요. 나는 0.5 초 간격으로 1에서 5까지의 진행률 표시 줄을 보여주고 자하는 Java에서 양식을 준비하고 있지만 코드에서 진행 막대는 2.5 초 후에 1에서 5로 바로 점프한다. 스윙의 jprogressbar

public class cafee extends JFrame implements ActionListener { 
JProgressBar pr1; 
JButton b1; 

public cafee() { 
    setLayout(new FlowLayout()); 
    pr1 = new JProgressBar(); 
    pr1.setSize(10, 1); 

    pr1.setForeground(Color.blue); 
    pr1.setMinimum(0); 
    pr1.setMaximum(5); 
    pr1.setValue(0); 
    pr1.setVisible(true); 
    b1 = new JButton(); 
    b1.setVisible(true); 

    add(pr1); 
    add(b1); 
    b1.addActionListener(this); 
} 

public void actionPerformed(ActionEvent ae) { 
    if (ae.getSource() == b1) { 
     for (int a = 1; a <= 5; a++) { 

      try { 
            pr1.setValue(a); 
       Thread.sleep(500); 
      } catch (Exception e) { 
      } 

     } 
    } 
} 

public static void main(String[] args) { 
    cafee caf = new cafee(); 
    caf.setVisible(true); 
    caf.setSize(500, 500); 
} 

}

답변

1

는 이벤트 처리 쓰레드 (EDT)에 잠을 경우, 당신이 그것을 차단, 따라서 처리 및 도장 방법 다른 모든 이벤트를 방지하고 ... 코드와 함께 도와주세요 발생합니다. JProgressBar은 별도의 백그라운드 스레드에서 실행중인 일부 작업의 진행 상태를 표시하는 데 유용합니다.

SwingWorker을 사용하십시오. API 문서에는 이해하기 쉬운 예제가 들어 있습니다.

+0

사실, SwingWorker가 최선의 방법입니다. EDT (Event Dispatch Thread)와 SwingWorker를 읽고 특히 publish() 메서드를 사용하면 백그라운드 스레드의 EDT와 "대화"할 수 있습니다. – sbrattla