Como deixar threads controlarem uma tela fxml?

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