Olá. tenho uma aplicação com comunicação serial desenvolvida com a API RXTX. Essa aplicação vai se comunicar com um módulo (hardware) pela porta serial.
A idéia para ativar e desativar o módulo é simples. Quando quero ativar, abro a porta serial e mando um comando (String, ex: “ativarModulo”) e o modulo responde com outro comando (String, ex:“ativada”). Quando eu recebo essa mensagem, a função de tratamento das mensagens reconhece a string de resposta e chama a função ativarExperiencia(); que conclui a ativação.
A mesma coisa faço para desativar, mando o comando (String, ex: “desativarModulo”) e o modulo responde com outro comando (String, ex: “desativada”). quando tratada a mensagem e reconhecida é chamada a função desativarExperiencia() e essa fecha a porta pela função conSerial.fecharPorta(); (conSerial é meu objeto da classe ConexaoSerial que é onde estão implementadas as funções de porta serial).
A parte de ativar está funcionando perfeitamente. Mas a parte de seativa trava na hora de fechar a porta serial. Fiz o debug e ele faz tudo chega a executar o comando conSerial.fecharPorta(); e a partir dae nm faz mais nada simplesmente trava. Detalhe, a porta não fecha (verifiquei com um monitor de portas)
Para testar, crie um botão e e chamei a função conSerial.fecharPorta();. Funcionou (A porta fechou normalmente). Chamei a função desativarPorta() e ela fecha normalmente também.
Simplesmente não entendo porque ela só trava quando eu chamo ela a partir da função de tratamento de Mensagem.
Método de tratamento de mensagem:
public void tratarMensagem(String mensagem){
if(mensagem.equals("dExp")){
ativarExperiencia();
}
if(mensagem.equals("aExp")){
desativarExperiencia();
}
}
Método que Desativa Experiência:
public void desativarExperiencia(){
log.append("Experiencia Desativada!\n");
statusExperienciaField.setText("Desativada");
conSerial.fecharPorta();
experienciaOn = false;
}
Não entendo porque só quando eu chamo o método desativarExperiencia() pelo método de tratar mensagem que ele dá erro.
Alguma idéia ???