2013-08-09 1 views
2

Я создал JDialog и установил его setUndecorated(true) - у него нет кнопки «Закрыть» по умолчанию. Этот класс JDialog создается каждый раз, когда нажата какая-то кнопка на главном JFrame. Этот диалог JDialog содержит кнопку «Отмена», которая имеет MouseListener:Как установить значение null JDialog после того, как он был установлен. Видимый (false)?

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

Так что я хочу установить этот экземпляр JDialog для null - потому что каждая кнопка нажата на время JFrame создает новый экземпляр JDialog - и использует ресурсы. Как я могу решить эту проблему?

EDIT

Я обнаружил, что если я каждый раз создавать новый JDialog на мыши, а затем установить его видимым - JDialog появляется окно не хорошо подтверждено в течение нескольких миллисекунд, после того, как это нормально. Поэтому я считаю, что более эффективным является создание нового экземпляра JDialog, а затем каждый раз устанавливаем его setVisible(true) или setVisible(false), когда мышь нажимает на некоторые кнопки JFrame/JDialog.

+0

Да, я имел в виду экземпляр .. (английский не мой родной, поэтому иногда это могут быть ошибки с моей стороны). –

ответ

4

Вы можете позвонить dispose() на JDialog, чтобы освободить ресурс, хотя я слышал, что утечка памяти все еще может произойти, особенно в отношении мягких и сильных ссылок.


Обратите внимание, что это утверждение в вашем вопросе путает:

Так что я хочу установить этот класс JDialog обнулить

Вы не можете установить класс обнулить, только переменная экземпляра ,

+0

Нет, я попытался поэкспериментировать: setVisible (false); распоряжаться(); а затем setVisible (true); - и диалог появится снова - значит, класс все еще существует. –

+0

@ErnestasGruodis: пока вы сохраняете жизнеспособные ссылки на объект, тогда да, он все равно будет существовать. Этого не будет возможно, если нет жизнеспособных ссылок. Вы не можете проверить его, как вы делаете, и ожидать иначе. –

+6

@ErnestasGruodis, как описано в документах http://docs.oracle.com/javase/6/docs/api/java/awt/Window.html#dispose(), ресурсы * * выпущены, но 'setVisible (true) 'перестраивает диалог. – Qwerky

 Смежные вопросы

  • Нет связанных вопросов^_^