Bom dia galera, bem estou com um probleminha aqui e gostaria se possivel da ajuda de vcs. Veja bem estou com um programa que faz comunicação serial half-duplex, bem só que não sei caso, mais meu problema e que este programa e para um sistema de alarme e ele faz um rotina determinada, ou seja, ele passa por algumas condições que sei quando vai aconter, mas também tem um evento que ocorre quando alguem usa o teclado que pode acontecer a qualquer momento e não estou sabendo trata, pois eu como disse estou trabalhando half-duplex e nao consegui e nem sei se seria necessaria trabalhar full-duplex. O que vcs me sujerião para que eu possa tratar este evento que chega a qualquer momento e eu nao sei quando. Estou anexando o metodo de leitura e o gerenciador de evento que tenho. Desde de já obrigado pela forças.
public String LerDados(){
try{
entrada=porta.getInputStream();
}catch(Exception e){
System.out.println("\n\n\t\tErro na leitura ! STATUS: "+ e);
}
try{
if(status==false){
porta.setInputBufferSize(1500);
porta.addEventListener(this);
status=true;
System.out.println("\n\t\tSucesso.. Porta aguardando !");
}
}catch(Exception e){
System.out.println("\n\n\t\tErro ao criar listenear: ");
System.out.println("\n\n\t\tSTATUS: " +e);
System.exit(1);
}
porta.notifyOnDataAvailable(true);
try{
threadLeitura =new Thread(this);
threadLeitura.start();
threadLeitura.join();
}catch(Exception e){
System.out.println();
System.exit(1);
}
String totalDadosLidos = Dadoslidos;
Dadoslidos="";
return totalDadosLidos;
}
//método RUN da thread de leitura
public void run() {
try{
Thread.sleep(600);
}catch(Exception e){
System.out.println("Erro STATUS = "+ e);
}
}
/**
* Gerenciador de eventos de leitura na porta serial.
* @param ev E o tipod do evento ocorrido na porta serial, podendo ser setado mais de um.
*/
public void serialEvent(SerialPortEvent ev){
switch(ev.getEventType()){
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
{
Dadoslidos+=dados();
}
}
}
/**
* Obtem e retorna os dados lidos na porta serial
* @return Dados lidos na porta serial.
*/
public String dados(){
byte bufferLeitura[] = new byte[1500];
String bu ="";
try{
while(entrada.available()>0){
nodeBytes = entrada.read(bufferLeitura);
bu = new String(bufferLeitura,0,nodeBytes);
}
if(bufferLeitura.length==0){
System.out.println("\nNada lido !");
}else if(bufferLeitura.length==1){
System.out.println("\nApenas um byte lido");
}
}catch(Exception e){
System.out.println("\nErro ao ler dados na porta " +e);
}
return bu;
}