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

Я создал диалоговое окно с jpanel в нем, и что на jpanel все еще сошлются, если я избавлюсь от диалогового окна. Я хочу уничтожить то диалоговое окно и все в нем, когда я нажимаю кнопку отмены. Как я удаляю и диалоговое окно и jpanel?

10
задан ryanyuyu 28 October 2015 в 13:13
поделиться

6 ответов

Отвечая на вопросы, которые вы задали в комментарии :

После отображения диалогового окна:

setVisible(true);

вы скрываете его, вызывая:

setVisible(false);

, а затем вы должны позвонить:

dialog.dispose();

, чтобы убедиться, что все ресурсы собственного графического интерфейса, используемые диалоговым окном, освобождены. Как только вы это сделаете, сборщик мусора очистит все объекты, если у вас больше не будет ссылок на них.

10
ответ дан 3 December 2019 в 15:21
поделиться

Не нужно удалять объект. Сборщик мусора позаботится о памяти, как только на нее больше не будут ссылаться.

4
ответ дан 3 December 2019 в 15:21
поделиться

Вы имели в виду «как» его уничтожить? В Java нет способа явно уничтожить объект. Сборщик мусора в Java автоматически освобождает занимаемую им память, если на него нет ссылки.

"но я создаю диалог с jpanel внутри него, и эта jpanel будет по-прежнему ссылаться. Я хочу уничтожить это диалоговое окно, нажав свою собственную кнопку {{1 }} "Отмена"

Просто попробуйте установить для этого объекта JPanel значение null или вызовите для него метод удаления, если он доступен.

2
ответ дан 3 December 2019 в 15:21
поделиться

В Java нет необходимости уничтожать объект, как в C ++. Существует сборщик мусора, который уничтожает (освобождает память, используемую) объекты автоматически после того, как в работающем коде нет ссылок на этот объект. Все, что вы можете сделать, - это принудительно уничтожить ссылку с помощью Object obj = null; Это уничтожит ссылку на obj.

2
ответ дан 3 December 2019 в 15:21
поделиться

Вы можете переопределить метод 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
}

(По общему признанию, некрасиво)

3
ответ дан 3 December 2019 в 15:21
поделиться

Если вы хотите удалить ссылку на этот объект на null, чтобы при следующем запуске сборщика мусора он мог уничтожить объект, думая, что это не так. получение ссылки.

2
ответ дан 3 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: