Thread ainda rodando

4 respostas
R

Estou com um problema mais ou menos assim:

Tenho uma Browser na minha tela e para ler os dados eu sempre crio uma Thread para  ficar lendo os dados e jogar no browser.

   que quando eu fecho a tela esta Thread ainda fica executando.

  O que eu queria é que quando o evento de WindowClosing eu setasse uma variável da classe q extends thread para q a mesma saísse do método run.

 OU não teria como eu dar um finalize na Thread através da VM ?

4 Respostas

F

Você pode usar o método

void interrupted();

Esse método deve interromper a thread em execução. Mas esse método só está disponível no J2SE 5.0.
Caso você esteja usando o J2SE 1.4 use o método

void stop();

O método stop() pode ser usado na versão 5.0 do JDK, mas está definido como deprecated, o que indica que provavelmente será excluido em algumas próximas versões do java.

R

Acho q não fui bem claro.

O problema é mais ou menos assim.

Tenho uma classe A q extends JFrame q instancia uma classe B que extends JTable esta classe instancia uma classe C que extends Threads só para ler os dados que irão ser jogados no browser.

Então eu tenho um Thread rodando só para ficar lendo os dados e jogar no browser.

O q tá acontecendo é que no evento WindowClosing da classe A eu gostaria de matar a Thread da classe C.

Que só para deixar claro todos os meus eventos de Frame, mouse, keyboard, etc são gerenciados por uma classe (“tratadora de eventos”) que implements todos os tipos dos eventos.

Sendo assim eu teria de matar a Thread através desta classe "tratadora de eventos"

Valeu moçada.

H

Vc já tentou usar o método setDaemon() ? Se true, ele mata a thread chamada quando a thread chamadora morre.

F

“rap32”:
Acho q não fui bem claro.

O problema é mais ou menos assim.

Tenho uma classe A q extends JFrame q instancia uma classe B que extends JTable esta classe instancia uma classe C que extends Threads só para ler os dados que irão ser jogados no browser.

Então eu tenho um Thread rodando só para ficar lendo os dados e jogar no browser.

O q tá acontecendo é que no evento WindowClosing da classe A eu gostaria de matar a Thread da classe C.

Que só para deixar claro todos os meus eventos de Frame, mouse, keyboard, etc são gerenciados por uma classe (“tratadora de eventos”) que implements todos os tipos dos eventos.

Sendo assim eu teria de matar a Thread através desta classe "tratadora de eventos"

Valeu moçada.

Você que não entendeu. Você coloca o objeto da thread e chama o método interrupted(); isso faz parar a thread. Num é isso que você quer?
Esse método pode ser chamado da classe tratadora de eventos, inclusive pode ser chamado a partir do evento WindowClosing.

lembrando: interrupted() para JDK 5.0 e stop() para JDK 1.4.x

got it?

Criado 19 de julho de 2005
Ultima resposta 20 de jul. de 2005
Respostas 4
Participantes 3