Chamar uma dialog com showAndWait dentro de um Service

6 views
Skip to first unread message

Rafael Piai Pimenta

unread,
Apr 17, 2019, 3:19:04 PM4/17/19
to JavaFX-BR
Boa tarde,

Desenvolvi um sistema para PDV, que já esta rodando em alguns clientes, mas tem uma situação que não está me agradando.

O sistema todo é baseado em comandos que o usuário pode executar em um textField. Ai conforme o comando, eu valido o onKeyPressed, e chamo os métodos para cada situação, conforme abaixo. É apenas um exemplo

this.textFieldComando.setOnKeyPressed(event -> {
    if (event.getCode().equals(KeyCode.ENTER)) {
        Platform.runLater(() -> {
            iniciarOperacaoCartaoSitef();
        });
        return;
    }
});

Nesse caso, supondo que o usuário teclou enter, eu inicio a transação do cartão, utilizando o Sitef Dedicado.
Como tenho que ficar mostrando várias mensagens que o Sitef vai me passando, esse método iniciarOperacaoCartaoSitef, é executando dentro de um Service.

Service<Boolean> cartaoService = new Service<Boolean>() {


Esse service, fica executando um while (Estrutura do Sitef), que fica me retornando qual o estado atual da transacao. Em um determinado momento, ele me retorna uma mensagem por exemplo, de cartão sem saldo. Nesse momento, eu gostaria de apresentar ao usuário a mensagem em um Alert, e "forçar" o sistema a esperar o ok, que seria usando o seguinte código:

Alert dialogoInfo = new Alert(Alert.AlertType.INFORMATION);
dialogoInfo.setTitle("Aviso");
dialogoInfo.setHeaderText("");
dialogoInfo.setContentText(retornoSitef.getBuffer());
dialogoInfo.showAndWait();

Mas como sabemos, como está dentro de um service em outra thread, o JavaFX retorna uma exceção:

java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-187

Para evitar isso, tenho usado:

JOptionPane.showMessageDialog(null, retornoSitef.getBuffer());

Mas que acaba me trazendo outros problemas, por não conseguir(ou não saber) controlar, forçar a janela do Swing a ficar na frente

Enfim, espero ter conseguido explicar o problema, para que algum amigo possa me ajudar.

Abraço

Rafael Piai Pimenta

unread,
Apr 18, 2019, 8:12:19 AM4/18/19
to JavaFX-BR
Bom dia,

Depois de muitos testes e pesquisas, encontrei esse post: Solução

Para o meu caso, parece ter resolvido. Ainda estou fazendo alguns testes, mas acredito que seja isso.
Reply all
Reply to author
Forward
0 new messages