JDialog setVisible (false) против dispose () - PullRequest
22 голосов
/ 31 августа 2011

Имеет ли смысл использовать setVisible (false) в диалоговом окне и использовать его позже или безопаснее каждый раз вызывать dispose () и создавать новый JDialog.Как насчет утечек памяти с помощью setVisible (false)?

РЕДАКТИРОВАТЬ: Мой вопрос не столько о выходе из приложения.Подробнее о диалогах, которые имеют основной фрейм в качестве родительского и открываются и закрываются в течение срока службы приложения.Например, скажем, в моих приложениях есть около 10 диалогов, которые отображают разные данные каждый раз, когда я их открываю.Должен ли я повторно использовать экземпляры и использовать setVisible (), или я должен каждый раз создавать новый диалог и утилизировать () их при закрытии.

Ответы [ 3 ]

24 голосов
/ 31 августа 2011

Я бы рекомендовал использовать dispose() для освобождения ресурсов и освобождения памяти.Если вы хотите снова отобразить диалоговое окно, просто вызовите setVisible(true).


. Важно отметить, что при удалении последнего отображаемого окна в виртуальной машине Java (VM) виртуальная машина может завершить работу.,См. AWT Threading Issues для получения дополнительной информации.

1 голос
/ 31 августа 2011

Я до сих пор не вижу различий between JDialog#dispose(); и JDialog.setVisible(false) больше здесь , каждый из них может быть активирован для повторного использования, и не имеет значения, был ли / был удален или видимым

я считаю, что этот вопрос должен быть разделен на три отдельные области

1) некоторая JFrame является родительской для JDialog или JWindow (exist only is is there JFrame), затем последняя должна выключить свет

2) без родителя для JDialog

3) еще существует еще JFrame, JDialog or JWindow, затем последний должен выключить свет

  • достижимо с помощью -> Window[] wins = Window.getWindows();
  • последний должен выключить свет -> System.exit(0);
  • Я полагаю, что во всех возможных случаях должны существовать видимые JFrame с JFrame.EXIT_ON_CLOSE, иначе может быть реализован WindowsListener с System.exit(0);
0 голосов
/ 21 ноября 2013

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

...