Я создал диалог с jpanel внутри него, и что jpanel будет по-прежнему ссылаться, если я избавлюсь от диалога. Я хочу уничтожить этот диалог и все в нем, когда я нажимаю кнопку отмены. Как удалить оба диалога и jpanel?
Как удалить объект, на который ссылается диалог?
Ответ 1
Отвечая на вопрос (ы), который вы поставили в комментарий:
Как только вы выведете диалог:
setVisible(true);
вы скрываете его, вызывая:
setVisible(false);
а затем вы должны позвонить:
dialog.dispose();
чтобы убедиться, что все ресурсы собственного GUI, используемые в этом диалоге, освобождаются. Как только вы это сделаете, сборщик мусора очистит все объекты, если у вас больше нет ссылок на них.
Ответ 2
-
Если это окно и видимо
я. frame.setVisible(ложь);
II. frame.dispose();
II. установить ссылку на null (ex.. frame = null;)
-
Если это не окно
I.set ссылка на null (ex.. x = null;)
Это все, как только объект будет бесплатным, GC освободит ресурсы , когда это будет похоже на.
Вот что вы должны понимать
*. Вы, как Java-программист , не можете заставить сборку мусора в Java;, она будет срабатывать только в том случае, если JVM считает, что ему нужна сборка мусора, основанная на размере кучи Java.
*. Существуют такие методы, как System.gc() и Runtime.gc(), который используется для отправки запроса коллекции мусора в JVM, но не гарантирует, что сбор мусора произойдет.
*. Если пространство памяти для создания нового объекта в куче Java Virtual Machine выбрасывает OutOfMemoryError или java.lang.OutOfMemoryError кучное пространство
И поиск об этом...
J2SE 5 (Java 2 Standard Edition) добавляет новую функцию под названием Эргономика. Цель эргономики - обеспечить хорошую производительность от JVM с минимальной настройкой командной строки.
Ответ 3
Не нужно удалять объект. Сборщик мусора будет заботиться о памяти, как только он больше не ссылается.
Ответ 4
Вы можете переопределить метод finalize() (см. http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#finalize%28%29) для выполнения очистки при уничтожении объекта.
Однако, в отличие от С++, нет гарантии, когда этот метод будет вызван. В С++ у вас есть объекты, хранящиеся в стеке, которые уничтожаются, когда выполнение оставляет область, в которой они были определены.
В Java весь объект хранится в куче. Они будут завершены, когда сборщик мусора решает собрать их (подразумевает, что они недоступны из вашего приложения), но вы не знаете, когда начнется GC. Таким образом, если у вас есть какая-то очистка, которая должна произойти при определенном (например, закрывая файл, чтобы его можно было записать), вы должны сами его закодировать и не полагаться на вызываемый метод 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
}
(По общему признанию, уродливый)
Ответ 5
Вы имели в виду "как" уничтожить его? Невозможно явно уничтожить объект в Java. сборщик мусора в Java автоматически восстанавливает занятую им память. Если не существует ссылки на то же, что существует.
", но я создаю диалог с jpanel внутри него, и что jpanel будет все еще упоминаются. Я хочу уничтожить этот диалог, когда нажимаете мою собственную кнопку" Отменить"
Просто попробуйте установить для объекта JPanel значение null или вызвать метод dispose на нем, если он доступен.
Ответ 6
Если вы хотите удалить назначение этой ссылки объекта null, чтобы при запуске Garbage Collector в следующий раз он мог уничтожить объект, думая, что он не получает ссылку.
Ответ 7
Нет необходимости уничтожать объект в Java таким образом, как на С++. Существует сборщик мусора, который автоматически уничтожает (освобождает память, используемую) объектами после того, как нет ссылок на этот объект в запущенном коде. Все, что вы можете сделать, это заставить уничтожить ссылку на Object obj = null;
. Это убивает ссылку на объект.
Ответ 8
"System.gc()" - лучший способ.
gc-Сборщик мусора.
Вот как вы собираетесь уничтожить объект в самой программе
Пример кода:
public class TestRun
{
public static void main(String args[])
{
/*1*/ TestRun tr=new TestRun();
/*2*/ System.gc(); //You can omit this step. This is just an example.
/*3*/ tr=null;
/*4*/ System.gc();
}
}
Объяснение
-
Создается объект класса TestRun и его ссылка хранится в переменной tr.
-
Вызывается сборщик мусора. Но не действует. Поскольку объект еще не разыменован.
-
Объект, созданный в шаге 1, теперь разыменован. Но пространство, которое было занято объектом, по-прежнему блокируется им.
-
Снова вызывается сборщик мусора, и теперь он видит, что объект, созданный на шаге 1, теперь разыменован. Следовательно, теперь он освобождает пространство, занимаемое объектом, и теперь объект удаляется из памяти простым языком.
Фактически он удалит все те объекты, которые уже разыменованы.
Хорошая практика - продолжать звонить в свой код.