2013-08-09 6 views
2

JDialog을 만들고 setUndecorated(true)으로 설정했습니다. 기본 "닫기"버튼이 없습니다. 이 JDialog 클래스는 메인 JFrame의 일부 버튼을 누를 때마다 생성됩니다. JFrame를 누를 때마다 버튼을 새 JDialog 인스턴스를 생성하기 때문에 - - 그리고 그 자원을 사용JDialog를 null로 설정하는 방법 setVisible (false)?

... 
public void mouseClicked(MouseEvent e) { 
    setVisible(false); 
    // How to set this JDialog class to null - release the resources? 
} 
... 

그래서 나는 null이 JDialog의 인스턴스를 설정하려면이 JDialog 대화 버튼 MouseListener이있는 "취소"를 포함하고 있습니다. 이 문제를 어떻게 해결할 수 있습니까? 그 확인 후 JDialog 윈도우가 아니라, 어떤 밀리 초 동안 확인되지 나타납니다 -

편집이 나는 경우마다 마우스 클릭에 새로운 JDialog를 만든 다음이 보이지 설정 것을 발견했다. 그래서 좀 더 효율적으로 새로운 JDialog 인스턴스를 만든 다음 매번 JFrame/JDialog 버튼을 클릭 할 때마다 setVisible(true) 또는 setVisible(false)으로 설정할 것을 생각합니다.

+0

네, 예를 들었습니다. (영어는 제 모국어가 아니기 때문에 때로는 제 편이 실수 일 수 있습니다.) –

답변

4

부드럽고 강력한 참조와 관련하여 여전히 메모리 누수가 발생할 수 있다고 들었지만 JDialog에서 리소스를 해제하려면 dispose()으로 전화 할 수 있습니다. 귀하의 질문에이 사항이 혼란 것을


참고 :

은 그래서 당신은 null로 클래스를 설정할 수 없습니다

를 null로이되는 JDialog 클래스 설정하려면, 단지 인스턴스 변수 .

+0

아니요, 실험 해 보았습니다 : setVisible (false); dispose(); 그리고 나서 setVisible (true); - 대화 상자가 다시 나타납니다. 따라서 클래스가 여전히 존재 함을 의미합니다. –

+0

@ErnestasGruodis : 객체에 대한 실행 가능한 참조를 유지하는 한 계속 그래도 존재합니다. 실행 가능한 참조가 없으면 gc를 수행 할 수 없습니다. 당신이하고있는 것처럼 그것을 테스트 할 수없고, 그렇지 않으면 기대할 수 없습니다. –

+6

@ErnestasGruodis 문서 http://docs.oracle.com/javase/6/docs/api/java/awt/Window.html#dispose()에 설명 된대로 자원 *이 릴리스되지만'setVisible (true) '대화 상자를 재구성합니다. – Qwerky

관련 문제