Как удалить объект, на который ссылается диалог?

Я создал диалог с 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, теперь разыменован. Следовательно, теперь он освобождает пространство, занимаемое объектом, и теперь объект удаляется из памяти простым языком.

Фактически он удалит все те объекты, которые уже разыменованы.

Хорошая практика - продолжать звонить в свой код.