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

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á

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;
1 curtida

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 ).

2 curtidas