Comunicação serial - Ler dados

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;

}

[quote=Glenio Montovani]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;

}[/quote]

Obrigado pelas respostas não dada mas já resolvi