이것으로 곤란을 겪었 겠지만 어쩌면 어쩌면 누군가가 전에이 문제를 겪었고 올바른 방향으로 나를 가리킬 수 있습니다.문제 해결 : 모달이며 아직 모달이 아닌 JDialog?
내가 명시 적으로 정의 된 소유자와 모달로 만든 장기 실행 작업의 진행, 표시하는 JDialog를이 : 작업이 완료되면 나중에
progressDialog = new JDialog(((Dialog)windowParent), true);
...
progressDialog.setVisible(true);
를, 내가 닫습니다 다시 대화 : 매우 드문 상황에서
protected void done() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progressDialog.setVisible(false);
}
});
}
는 대화 a)는 가까이하지 않으며, 사용자가 (이론적) 대화 뒤에 윈도우와 상호 작용 할 수있는, 즉 B), 진정으로 모달이 아니다. 어떤 아이디어가이 원인 일 수 있습니까? 불행하게도 리눅스 시스템에서만 매우 드물게 발생합니다. 이것은 스윙 버그 일 수 있습니까 아니면 내가 뭔가 잘못하고있을 수 있습니까?
은 당신이 정말로 위해 invokeLater가 필요하십니까 Sun Blog과 Dialog.ModalExclusionType의 동반 Javadoc : 당신은 자바 6을 사용할 수있는 경우에는 JDK6 양상의 변화와 개선 사항에 대한보고를 할 수 있습니다 : 양상 자체로
유괴? GUI를 통해 호출되었을 가능성이 가장 높기 때문에 EDT에 이미있을 것이라고 추측합니다. – willcodejavaforfood
가시성 설정은 GUI 작업이므로 done()이 EDT가 아닌 스레드에서 호출되는 즉시 invokeLater() 호출에 넣어야합니다. 그래서 이것은 안전한 일입니다. EDT에서 전화를 받았을 때도 아프지 않을 것입니다. –