JDialog setVisible (false) vs dispose()
Имеет ли смысл использовать setVisible (false) в диалоговом окне и повторно использовать его позже или безопаснее каждый раз вызывать dispose() и создавать новый JDialog.
Как насчет утечек памяти с помощью setVisible (false)?
EDIT:
Мой вопрос не столько о выходе из приложения. Подробнее о Dialogs, которые имеют основной кадр как родительский и открыты и закрыты в течение срока службы приложения. Например. пусть мои приложения имеют около 10 диалогов, которые отображают разные данные каждый раз, когда я их открываю. Должен ли я повторно использовать экземпляры и использовать setVisible(), или я должен каждый раз создавать новый диалог и удалять() их при закрытии.
Ответы
Ответ 1
Я бы рекомендовал использовать dispose()
для освобождения ресурсов и освобождения памяти. Если вы хотите снова отобразить диалоговое окно, просто вызовите setVisible(true)
.
Важно отметить, что когда последнее отображаемое окно в виртуальной машине Java (VM) удаляется, виртуальная машина может завершаться. Для получения дополнительной информации см. AWT Threading Issues.
Ответ 2
Я все еще не вижу различий 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);
Ответ 3
Вызов dispose()
освобождает ресурсы, связанные с диалогом. Вы можете сохранить диалог вокруг вас после dispose()
. Если вы беспокоитесь о том, что вокруг слишком много диалогов, используйте WeakReference
, чтобы сохранить ссылку. Это гарантирует, что ваши диалоги, которые вы не используете, сохраняют только мусорную коллекцию, если пространство, которое они занимают, не требуется.