Я создал диалоговое окно с jpanel в нем, и что на jpanel все еще сошлются, если я избавлюсь от диалогового окна. Я хочу уничтожить то диалоговое окно и все в нем, когда я нажимаю кнопку отмены. Как я удаляю и диалоговое окно и jpanel?
Отвечая на вопросы, которые вы задали в комментарии :
После отображения диалогового окна:
setVisible(true);
вы скрываете его, вызывая:
setVisible(false);
, а затем вы должны позвонить:
dialog.dispose();
, чтобы убедиться, что все ресурсы собственного графического интерфейса, используемые диалоговым окном, освобождены. Как только вы это сделаете, сборщик мусора очистит все объекты, если у вас больше не будет ссылок на них.
Не нужно удалять объект. Сборщик мусора позаботится о памяти, как только на нее больше не будут ссылаться.
Вы имели в виду «как» его уничтожить? В Java нет способа явно уничтожить объект. Сборщик мусора в Java автоматически освобождает занимаемую им память, если на него нет ссылки.
"но я создаю диалог с jpanel внутри него, и эта jpanel будет по-прежнему ссылаться. Я хочу уничтожить это диалоговое окно, нажав свою собственную кнопку {{1 }} "Отмена"
Просто попробуйте установить для этого объекта JPanel значение null или вызовите для него метод удаления, если он доступен.
В Java нет необходимости уничтожать объект, как в C ++. Существует сборщик мусора, который уничтожает (освобождает память, используемую) объекты автоматически после того, как в работающем коде нет ссылок на этот объект. Все, что вы можете сделать, - это принудительно уничтожить ссылку с помощью Object obj = null;
Это уничтожит ссылку на obj.
Вы можете переопределить метод finalize () (см. http://java.sun.com/j2se/1.4.2/docs/api /java/lang/Object.html#finalize%28%29) для выполнения очистки при уничтожении объекта.
Однако, в отличие от C ++, нет гарантии, когда будет вызван этот метод. В C ++ у вас есть объекты, хранящиеся в стеке, которые уничтожаются, когда выполнение выходит за пределы области, в которой они были определены.
В Java все объекты хранятся в куче. Они будут завершены, когда сборщик мусора решит их собрать (подразумевается, что они недоступны из вашего приложения), но вы не знаете, когда сработает сборщик мусора. Таким образом, если у вас есть некоторая очистка, которая должна произойти в определенное время (например, закрытие файла, чтобы в него можно было записать), вы должны кодировать его самостоятельно, а не полагаться на вызываемый метод finalize ().
Типичный шаблон для этого основан на блоке try ... finally
:
X x = null;
try {
// ... do some stuff
x = ... // obtain an object
... // do some stuff
}
finally {
if(x != null)
x.close(); // Perform cleanup WRT x
}
(По общему признанию, некрасиво)
Если вы хотите удалить ссылку на этот объект на null, чтобы при следующем запуске сборщика мусора он мог уничтожить объект, думая, что это не так. получение ссылки.