Erro receber dados da porta serial

5 respostas
R
Estou fazendo um programinha que recebera algumas informações de uma serial, mas estou tendo um problema e naum estou conseguindo adicionar um gerenciador de eventos para a porta serial, apostila que estou lendo, o comando esta assim
porta.addEventListener(this);
Esta dando erro de sintaxe, diz que: addEventListener(javax.comm.SerialPortEventListener) in javax.comm.SerialPort cannot be applied to (minha classe principal). Aguem sabe como corrigir esse erro? Caso precise segue abaixo meus codigos: //Minha classe de conexão:
import java.util.Enumeration;
import javax.comm.*;

/**
 *
 * @author Rafael
 */
public class serial{
    
    //private String[] portas;
    private SerialPort porta;
    
    /** Creates a new instance of serial */
    public static javax.comm.SerialPort getserial() throws Exception{
        String[] portas;
        
        //detecta as portas disponiveis
        Enumeration listaDePortas;
        listaDePortas = CommPortIdentifier.getPortIdentifiers();
        int i = 0;
        portas = new String[10];
        while(listaDePortas.hasMoreElements()) {
            CommPortIdentifier ips =
            (CommPortIdentifier)listaDePortas.nextElement();
            portas[i] = ips.getName();
            System.out.println(portas[i]);
            i++;
        }
        
        //abrir a porta
        int baudrate = 9600; //bits por segundo
        CommPortIdentifier cp;
        cp = CommPortIdentifier.getPortIdentifier("COM1"); //retorna um identificador da porta escolhida
        SerialPort porta = (SerialPort)cp.open("serial",1000); //abrindo a porta por um segundo
        porta.setSerialPortParams(baudrate, porta.DATABITS_8, porta.STOPBITS_2, porta.PARITY_NONE);
        return porta;
    }
}
//meu metodo que ira ser usado para atualizar as info. na tela
public void atualizaInfo(SerialPortEvent ev){
        /*try{
            serial se = new serial();
            InputStream entrada = se.getserial().getInputStream();
        }catch(Exception e){
            System.out.println("Erro: " + e.getMessage());
        }*/
        serial se = new serial();
        try {
            SerialPort porta;
            porta = se.getserial();
            porta.addEventListener(this);  //adiciona o gerenciador de eventos
            porta.notifyOnDataAvailable(true);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

estou usando os imports: import javax.comm.SerialPort, import javax.comm.SerialPortEvent.
naum sei se é importante essa informação mas estou usando o netbeans 5.5 e tenho ja o comm instalado e configurado corretamente na minha maquina, ja testei ele dando um getPort para verificar as portas disponiveis.

Desde ja agradeço.
Vlw

5 Respostas

smkk

olá, o método está dizendo que ele não pode receber o objeto da sua parte por que ele não é um javax.comm.SerialPortEventListener, para isso você terá que fazer com que sua classe serial extenda a classe javax.comm.SerialPortEventListener, como a seguir:

... public class Serial extends javax.comm.SerialPortEventListener { ...

por favor repare que mudei de serial para Serial o nome da classe, porque isto é um padrão da Sun e deveriamos segui-lo.

com relação a implementação do corpo do método não poderei ajudar muito, pois nunca utilizei esta classe.

_Renatu

na verdade muito provavelmente SerialPortEventListener é uma interface, como a maioria dos listeners…

entao pra resolver seu problema sua classe deverá implementar essa interface, assim:

public class Serial implements javax.comm.SerialPortEventListener

e muito provavelmente essa interface vai te forçar a codificar algum método, que trata os eventos que esta interface está disposta a tratar, como a chegada de dados na porta.

T

Não se esqueça que normalmente os dados chegam de 8 em 8 bytes, ou de 16 em 16 bytes dependendo de seu chip de comunicação serial e de seu sistema operacional. (Eles não vêm 1 byte de cada vez, nem vêm todos de uma vez).
Então você precisa acumulá-los de alguma forma no seu event listener para poder processá-los adequadamente.

dcbasso

Só por curiosidade você está usando os componentes oficiais da SUN para fazer o acesso serial?
Qual SO vai utilizar para acessar a porta serial?

abraços!

R

Ola, muito obrigado a todos, agora naum esta mais dando erro de sintaxe, so preciso fazer os teste com a placa que vou montar, usei o public class Serial implements SerialPortEventListener e realmente apareceu um metodo tratando os eventos.

respondendo a pergunta do dcbasso:
Estou usando os componentes oficiais da sun, baxei do site deles, e o meu SO é o windows.

E bem lembrado thiagol, tinha me esquecido desse detalhe vou ter que tratar isso, vou receber 8bits de cada vez.

Bom, agradeço muito a ajuda de todos.
Vlw

Criado 16 de outubro de 2007
Ultima resposta 17 de out. de 2007
Respostas 5
Participantes 5