Listeners + Threads?

7 respostas
Z

Galera ,

Estou com uma duvida acho que básica :cry:

Pra cada listener ( seja um listener swing de um botão , de uma porta serial , de um socket ) é criado uma thread ?

Ou seja ,
Se eu desenhar um Jpanel com 50 botões , teria 50 threads como listeners ?

Abraços ,
Vlw

7 Respostas

davidbuzatto

Não.
Porque você está preocupado com isso?

Z

davidbuzatto:
Não.
Porque você está preocupado com isso?

Do nada bateu essa duvida existêncial .

Porque não ?

E

Não; um Listener não é uma Thread, e uma thread não é criada para o listener. O listener roda na “thread do Swing”, que é uma única thread. Portanto, se você rodar código que é muito lento no Listener, a tela fica congelada, exatamente porque o processamento não é feito em uma thread separada.

Z

entanglement:
Não; um Listener não é uma Thread, e uma thread não é criada para o listener. O listener roda na “thread do Swing”, que é uma única thread. Portanto, se você rodar código que é muito lento no Listener, a tela fica congelada, exatamente porque o processamento não é feito em uma thread separada.

Certo e eu poderia ter diversos listeners pendurado em uma Thread ?

davidbuzatto

entanglement, é uma thread do awt não é não?
Os eventos vão sendo enfileirados, e a thread que monitora essa fila os consome. É mais ou menos assim que funciona.
Então é uma thread que cuida disso para os componentes gráficos.

[]´s

Z

davidbuzatto:
entanglement, é uma thread do awt não é não?
Os eventos vão sendo enfileirados, e a thread que monitora essa fila os consome. É mais ou menos assim que funciona.
Então é uma thread que cuida disso para os componentes gráficos.

[]´s

Beleza . Mas eu poderia por exemplo chamar algum componente Swing a partir da minha thread Main e colocar alguns listeners nela .
Porem a thread continua lendo meus métodos implementados e ouvindo os listeners certo ?
Qual seria a prioridade neste caso ? Ler meus métodos ou listeners?

ViniGodoy

Zaperjava:
Beleza . Mas eu poderia por exemplo chamar algum componente Swing a partir da minha thread Main e colocar alguns listeners nela .
Porem a thread continua lendo meus métodos implementados e ouvindo os listeners certo ?
Qual seria a prioridade neste caso ? Ler meus métodos ou listeners?

Acho que você está confundindo código com thread.
Thread é thread, objeto é objeto, código é código.

Uma thread nada mais é que uma linha de execução do seu programa. Duas threads, ao mesmo tempo, podem executar trechos de código da mesma classe. Os objetos ainda são os mesmos.

Então o que acontece. Quando vc pela sua Main thread adiciona um listener à um botão, esse listener é registrado num objeto do Swing. Esse objeto mantém uma lista, de todos os listeners adicionados nele.

Quando um evento é disparado, a thread do swing vai até o botão, e percorre todos os objetos listeners que estão na sua lista, chamando o método actionPerformed de cada um deles. O código do seu listener é então executado. Essa execução ocorre dentro da thread do Swing, não da thread main, independente dela originalmente ter adicionado aquele listener lá ou não.

Criado 14 de julho de 2010
Ultima resposta 14 de jul. de 2010
Respostas 7
Participantes 4