Como excluir um jframe da memória em tempo de execução?

2 respostas Resolvido
jframejava
G

Eu estruturei um programa de um jeito que quando ele abre uma nova tela, para configuração, etc… Ele cria um novo objeto Jframe, e apenas seta a visibilidade da tela atual para “false”. Porém, eu tenho a impressão de que ele não perde a tela que ele fechou, e ela fica na memória. Eu até tentei mudar a visibilidade pra “true”, reaproveitando alguma tela antiga, mas quando eu faço isso, ela fica toda bugada, com os botões todos tortos e errados. Por isso que eu crio uma nova e esqueço essa. Mas tem alguma forma de “apagar totalmente um objeto da memória manualmente” para liberar ram? Tipo um: tela.destroy();, sei lá

2 Respostas

P

O garbage collector se encarrega de excluir da memória os objectos não referenciados.
Se simplesmente alteras a visibilidade para false, o teu objecto continua referenciado e sim, continua em memória. Para ficara elegível para destruição pelo garbage collector deves colocar a null que brevemente será eliminada da memória.

tela = null;
D
Solucao aceita

Sim, seu JFrame ainda existe.

O ideal, antes de apontar a referência que aponta para ele como null, igual ao @pmlm disse, é também:

No construtor do seu JFrame:

setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );

Isso fará que quando for fechado, os recursos atrelados a ele serão liberados e ele será destruído.

Para criar um novo, vc precisará construí-lo novamente. Se precisar, por algum motivo, fechá-lo, dentro ou fora dele, vc deve usar o método dispose() ao invés do setVisible( false ).

Criado 15 de dezembro de 2020
Ultima resposta 16 de dez. de 2020
Respostas 2
Participantes 3