2009-03-16 9 views
1

이것으로 곤란을 겪었 겠지만 어쩌면 어쩌면 누군가가 전에이 문제를 겪었고 올바른 방향으로 나를 가리킬 수 있습니다.문제 해결 : 모달이며 아직 모달이 아닌 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), 진정으로 모달이 아니다. 어떤 아이디어가이 원인 일 수 있습니까? 불행하게도 리눅스 시스템에서만 매우 드물게 발생합니다. 이것은 스윙 버그 일 수 있습니까 아니면 내가 뭔가 잘못하고있을 수 있습니까?

+0

은 당신이 정말로 위해 invokeLater가 필요하십니까 Sun Blog과 Dialog.ModalExclusionType의 동반 Javadoc : 당신은 자바 6을 사용할 수있는 경우에는 JDK6 양상의 변화와 개선 사항에 대한보고를 할 수 있습니다 : 양상 자체로

유괴? GUI를 통해 호출되었을 가능성이 가장 높기 때문에 EDT에 이미있을 것이라고 추측합니다. – willcodejavaforfood

+0

가시성 설정은 GUI 작업이므로 done()이 EDT가 아닌 스레드에서 호출되는 즉시 invokeLater() 호출에 넣어야합니다. 그래서 이것은 안전한 일입니다. EDT에서 전화를 받았을 때도 아프지 않을 것입니다. –

답변

1

문제에 대한 확실한 해결책을 제공 할 수는 없지만 Linux에서 모달 대화 상자로 모든 종류의 이상한 동작을 보았습니다. 대부분 그 위치에서 창 관리자에 따라 다릅니다.

우리의 판매 시점 시스템에서 우리는 가장 안정적이고 바람직한 특성을 제공했기 때문에 매우 최소한의 "flwm"창 관리자를 사용하여 끝내게되었습니다. 그러나 현대 리눅스 데스크톱을 위해 그것을 추천하지 않을 것입니다.