JLabel을 추가 할 JPanel이 있습니다. 그런 다음 모든 JLabel을 제거하고 새로운 JLabel을 추가하려고합니다.Revalidate and repaint - Java Swing
그래서 나는 다음을 수행하십시오
panel.removeAll();panel.repaint();
panel.add(new JLabel("Add something new");
panel.revalidate();
이 잘 작동합니다. 다음과 같이 새 스레드를 시작하면 내 문제가 발생합니다.
panel.removeAll();panel.repaint();
(1)panel.add(new JLabel("Add something new");
panel.revalidate();
//new thread to start - this thread creates new JLabels that should appear under (1)
firstProducer.start();
try {
firstProducer.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
그런 다음 원본 JLabel의 출력은 계속 표시됩니다. revalidate 프로세스는 장기 실행 작업이므로 firstProducer 스레드가 시작되고 재 검증이 진행 중이고 충돌이 발생하고 있음을 읽었습니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?
동기화 문제? –
1) * "JLabel을 추가 할 JPanel이 있습니다."* 왜? 텍스트' ""로 GUI에 라벨을 붙이면 사용하기 쉽지만 보이지 않게됩니다. 2) 장기간 작동이 EDT 및 GUI에서 업데이트되었는지 확인하십시오. 장기 실행 태스크를위한'SwingWorker'를 구현하십시오. 자세한 내용은 [동시성의 동시성] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)을 참조하십시오. –
도움말에 대한 환호 –