Aplicação ficando presa com System.exit()

7 respostas
Stormqueen1990

Olá a todos,

estou implementando um programinha simples com Swing, e para que ele fechasse a janela ao clicar no botão “X” adicionei um WindowAdapter e implementei dentro dele a função windowClosing(), como demonstrado abaixo:

this.addWindowListener(new WindowAdapter() { private void windowClosing() { System.exit(0); } });
A questão é que o processo javaw.exe fica preso mesmo usando System.exit(0).

Alguma idéia para solucionar a questão?

Obs.: rodando pelo NetBeans, quando fecho no X o run do ant não termina.

7 Respostas

S

tenta usar o dispose

Stormqueen1990

Era mais ou menos isso:

this.addWindowListener(new WindowAdapter() { private void windowClosed() { dispose(); System.exit(0); } });

Se era, não resolveu. :frowning:

UMC
Stormqueen1990:
souzajhonatan:
tenta usar o dispose
Era mais ou menos isso:
this.addWindowListener(new WindowAdapter() {
   private void windowClosed() {
       dispose();
       System.exit(0);
   }
});

Se era, não resolveu. :(

rapaz retire o System.exit(0); ficando assim:
this.addWindowListener(new WindowAdapter() {
   private void windowClosed() {
       dispose();
       
   }
});
M

Basta chamar o método (no construtor mesmo):

setDefaultCloseOperation(DISPOSE_ON_CLOSE);

Com isso, quando você pressionar o [X] da janela o método dispose() será automaticamente chamado, fechando a janela e (se não houver mais janelas abertas) encerrando o programa (logo, não é preciso adicionar WindowListener).

ViniGodoy

Nenhuma dessas dicas tem nada a ver. O System.exit(0) comanda o fechamento da VM, e não deveria deixar o Java preso, sob hipótese nenhuma.

Seu sistema dispara alguma outra thread? Ela está ficando presa?
Você definiu a thread como setDaemon(true)?

Ainda assim, isso não deveria ocorrer. Você tem certeza que o javaw.exe que está ficando é o mesmo da aplicação?

Que VM você está usando?

Stormqueen1990

ViniGodoy:
Nenhuma dessas dicas tem nada a ver. O System.exit(0) comanda o fechamento da VM, e não deveria deixar o Java preso, sob hipótese nenhuma.

Seu sistema dispara alguma outra thread? Ela está ficando presa?
Você definiu a thread como setDaemon(true)?

Ainda assim, isso não deveria ocorrer. Você tem certeza que o javaw.exe que está ficando é o mesmo da aplicação?

Que VM você está usando?


Oi Vini,

não tem nenhuma outra thread sendo disparada pelo meu sistema. Na verdade, o que eu fiz é algo muito simples, só uma janela em Swing com 3 componentes (2 JTextArea e 1 JButton).

E sim, o javaw.exe que está ficando preso é o mesmo da aplicação. Ele só termina a execução quando eu clico no “stop” do run do NetBeans. Quando eu fecho no X deveria interromper a execução lá também, não?
Testei rodar e fechar várias vezes e não termina o processo.

Sobre qual VM, não entendi a pergunta… :?:

ViniGodoy

Pode zipar o seu código e anexa-lo?

Criado 5 de dezembro de 2009
Ultima resposta 7 de dez. de 2009
Respostas 7
Participantes 5