Olá pessoal! estou com um problema muito estranho que não encontro a causa e gostaria de ver se alguém já viu algo parecido.
O Método abaixo é uma função que retorna uma lista de mensagens.
Vejam que não há condição de saída uma vez que preciso que este loop rode enquanto meu aplicativo estiver sendo executado.
O que ele faz basicamente é buscar uma lista de mensagens e verificar se já existe uma conversa para o numero, se já existir ele captura a conversa e da continuidade ao fluxo. Se não existir instancia um novo objeto Conversa e adiciona na lista de conversas.
O que ocorre é que este loop para de rodar sem mais nem menos e não imprime nenhuma das mensagens que coloquei no código. É como se “true” começasse a valer “false” no while.
private static void msgListener() {
while (true) {
ArrayList<MensagemJSON> lm = Listener.getMensagensEntrada();
System.out.println("Chamou listener em " + sdf.format(new Date()) + " - " + lm.size() + " mensagens...");
if (lm.size() > 0 && lm != null) {
try {
lm.forEach(msgs -> {
Optional<Conversas> lc = getListadeconversas().stream().filter(f -> f.getCelular().getNumCompleto().equals(msgs.getNumero())).findFirst();
if (lc.isPresent()) {
Conversas c = lc.get();
c.setMensagen(msgs.getMsg());
Menus.gerentedemenus(c);
} else {
Conversas c = new Conversas(new Celular(msgs.getNumero()), "inicio", msgs.getNomePush());
getListadeconversas().add(c);
Menus.gerentedemenus(c);
}
});
} catch (Exception e) {
System.out.println("Erro no listener de mensagens");
}
} else {
System.out.println("Entrou no else");
}
}
}
Alguém tem ideia do que pode estar ocorrendo?
uma observação é que tenho este aplicativo rodando em duas VMs dentro do Hyper-v, e o problema não ocorre com frequência por isso não consigo pegar ele em um debug. Hora o código roda horas sem travar e hora em poucos segundos ele para.
Se alguém já passou por algo parecido por favor me dê uma luz.
Obrigado desde já.