Eu estou tentando fazer uma arvore genealógica em java usando threads. Eu criei processos Pai, Filho1, Filho2 etc, e tava tudo dando certo enquanto eu só queria executar no terminal, mas quando eu tentei integrar em uma GUI, começou a dar problema.
Por exemplo, o processo Pai chama os processos filhos, quando um processo é chamado, eu quero que alguns elementos da tela mudem, mas como eu posso controlar a tela por outras classes? Digo, eu tenho um controller com os elementos e tudo mais, mas como posso controlá-los pelas threads? Eu tentei deixar os elementos públicos, deixá-los estáticos, criar um objeto da classe controller, usar getters e setters, mas nada funciona.
Que problema?
Troca de mensagens entre objetos, ou seja, métodos e parâmetros.
Sem ver o seu código fica difícil, de antemão dá pra dizer que se deixou tudo estático, já está errado.
Bom, isso tá um pouco confuso … De qualquer maneira, o que posso adiantar é que manipulação de interface gráfica é sempre feita por uma única thread. O que você pode fazer é usar modelos assíncronos para enviar o processamento para woker threads e comunicar os eventos do processamento para a thread que atualiza a interface gráfica. No Swing essa thread se chama EventDispatch.
1 curtida
Se esta usando javaFX, dentro da Thread use :
Platform.runLater( () -> {
// exemplo
controller.seuMetodo();
controller.text1.setText("novo Conteudo");
} );
Mas cuidado com o uso excessivo de Threads, qq coisa dê uma olhada no pool de Threads.
1 curtida