Подтвердить что ты не робот

JDialog setVisible (false) vs dispose()

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

EDIT: Мой вопрос не столько о выходе из приложения. Подробнее о Dialogs, которые имеют основной кадр как родительский и открыты и закрыты в течение срока службы приложения. Например. пусть мои приложения имеют около 10 диалогов, которые отображают разные данные каждый раз, когда я их открываю. Должен ли я повторно использовать экземпляры и использовать setVisible(), или я должен каждый раз создавать новый диалог и удалять() их при закрытии.

4b9b3361

Ответ 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, чтобы сохранить ссылку. Это гарантирует, что ваши диалоги, которые вы не используете, сохраняют только мусорную коллекцию, если пространство, которое они занимают, не требуется.