Duvidas em uma linha de comando do Jframe...alguém pode me ajudar?

Por favor, estou com duvida nesta linha de comando, queria saber qual a utilidade dessa linha!!!

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

aqui segue o bloco completa em que essa linha pertence:

 [i] JFrame frame = new ImageViewerFrame();
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setVisible(true);[/i]

Valeu…

vc está informando a operação padrão de “fechamento”.
é o que deve ser feito quando o usuário apertar o “X” da janela.

sem essa linha a janela fecha mas o programa não termina.

Só para complementar o que o Sombriks disse, essa opção do JFrame instrui o Garbage Colector do JDK para apagar da memória as variáveis criadas durante o runtime. Se isso não for feito, cada vez que você roda o programa, como bem disse o Sombriks, será ocupado mais e mais espaço da memória.

brother, usar o método setDefultCloseOperation(JFrame.EXIT_ON_CLOSE); não tem nada haver com o coletor de lixo. Esse método como o sobrinks disse é um método de conveniência para que não seja necessário registrar um listener para ouvir o evento de fechamento da janela em questão e ao ser ouvido chamar um System.exit(0).

Não tem como vc invocar a execução do coletor de lixo diretamente e ter certeza que este será executado.

Para “sugerir” à máquina virtual que ela execute o coletor de lixo pode-se usar System.gc(), mas como falei não há nenhuma garantia que ele seja executado.

O coletor de lixo é automático, a jvm o executa quando necessário. É claro que quando o usuário fechar a janela e finalizar o programa todo o processo será discartado, levando consigo todos os objetos criados. O coletor de lixo é executado quando finaliza-se algum método, etc, não tem como ter um controle preciso sobre o mesmo. Só é possível sugerir sua execuçã, nada mais.

Se não for usado o setDefultCloseOperation(JFrame.EXIT_ON_CLOSE) o frame ficará invisível, mas o processo como um todo aind estará ativo, e o coletor de lixo não será executado a não ser que haja necessidade, creio que nem mesmo o JFrame será discartado, pois sua execução ainda não foi terminada.

Falow!

Ele esta certo vc esta fazendo a operação X para fechar, ou melhor quando vc abre um aplicativo e contem aquele X, é ele que vc esta gerando.

Falow Paulo

se vc nao colocar essa linha, a JVM não termina. Faz um teste pra vc entender: Abra e feche seu programa 3 vezes sem essa linha. Aí depois da uma olhada (no Gerenciador de tarefas) nos processos abertos. Vc vai ver 3 instancias do java rodando. :slight_smile:

Botão fechar que vc esta gerando.