swingList를 사용하여 코드를 작성했습니다. actionListener를 추가하면 progressBar가 업데이트되지 않습니다.java swing progressBar
버튼 및 액션 리스너가 없어도 효과적입니다. progressBar 업데이트를 가능한 간단하고 깔끔하게 만드는 방법? 첨부 된 코드는 내 문제를 요약 한 이해하기 쉬운 예제입니다. ActionPerformed 메소드를 주석 처리하고 main에서 프로그램을 실행하면 잘 작동합니다.
설명하지 않고 코드를 붙여 넣기 만하면 안됩니다. 나는이를 보았다 :
추신 : swing progressBar threading
public class Okno {
private JProgressBar progressBar = new JProgressBar(0,306);
JFrame f = new JFrame("JProgressBar Sample");
JButton b = new JButton("start");
ActionListener a = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
barupdate();
}
};
private void barupdate(){
for(int p = 1; p<308;p=p+2){
System.out.println(p);
progressBar.setValue(p);
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private Okno(){
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
progressBar.setStringPainted(true);
f.add(progressBar, BorderLayout.SOUTH);
f.add(b, BorderLayout.NORTH);
b.addActionListener(a);
f.setSize(300, 300);
f.setVisible(true);
}
public static void main(String[] args) {
Okno okno = new Okno();
}
}
이것은 일반적으로 같은 방식으로 해결되는 매우 일반적인 문제입니다.이 경우 가장 좋은 해결책은 일반적으로 [SwingWorker]를 사용하는 것입니다 (예 : http://stackoverflow.com/questions/12020949/jprogressbar-isnt). -progressing/12021971 # 12021971). 또한이 문제에 대한 자세한 내용은 [동시성 (Concurrency in Swing)] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)을 참조하십시오. 대부분의 경우 Swing은 쓰레드에 안전하지 않고 UI를 업데이트하기 위해 별도의 예방 조치를 취해야하기 때문에 다른'Thread'를 사용하는 것이 최선의 방법은 아닙니다. SwingWorker가 무료로 제공합니다.) – MadProgrammer
@ MadProgrammer,'이 경우 가장 좋은 해결책은 보통 SwingWorker를 사용하는 것입니다 ... 당신은 Swing에서 Concurrency를 봐야합니다. '- 내가 생각하기를 바란다. – camickr
@camickr 질문은 닫아야하지만 사람들과 문제가 있다는 것을 알고 있으므로 내 의견을 남기고 (대답을 지원하는) – MadProgrammer