Почему у меня течет JDialogs? - PullRequest
3 голосов
/ 08 мая 2009

У меня есть JFrame, и я открываю JDialog из него и еще один JDialog из этого диалога - в каком меню у меня видны 3 окна (JFrame, JDialog1, Jdialog2).

Когда я закрываю оба диалога и запускаю сборщик мусора несколько раз (из профилировщика netbeans) Я вижу, что JDialog2 (тот, что открыт из JDialog1) - сборщик мусора, но JDialog1 (открытый из JFrame) все еще висит в пуле живых объектов.

Я каждый раз создаю новые объекты - поэтому через некоторое время у меня возникает ошибка OutOfMemoryError из-за утечки памяти.

Должен ли я относиться к JDialogs особым образом, чтобы они не протекали?

кстати я делаю setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE) в обоих диалоговых окнах

Ответы [ 3 ]

9 голосов
/ 08 мая 2009

Вы не зарегистрировали всех своих слушателей в диалоге (включая какие-либо его компоненты)?

Оставление зарегистрированных слушателей может быть основным источником утечек памяти.

4 голосов
/ 08 мая 2009

Какова ваша операция закрытия по умолчанию? Из Java JDialog API:

По умолчанию установлено значение HIDE_ON_CLOSE.

В основном это означает, что setVisible(false) или почти эквивалент этого вызывается, когда пользователь нажимает кнопку закрытия. Наблюдаемое вами поведение согласуется с этим.

Попробуйте

jDialog1.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE)
1 голос
/ 08 мая 2009

Чтобы освободить выделенные ресурсы, вы должны вызвать метод dispose. Недостаточно просто скрыть диалог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...