Olá nessa dica mostrarei como trabalhar com a API da SUN para comunicação com as portas seriais.

1) Baixar a API:
 Você encontra a API disponível no site:
 http://java.sun.com/products/javacomm/index.jsp
 Basta baixar a API e realizar os procedimentos de instalação. Após baixar a API, descompactá-la, você
terá:
 
o  Copiar o arquivo win32com.dll para o diretório C:\JavaSDK\BIN (isto é, o diretório onde o
J2SDK foi instalado no seu PC). 
o  Copiar o arquivo comm.jar para o diretório C:\JavaSDK\BIN\LIB. 
o  Copiar o arquivo javax.comm.properties para o diretório C:\JavaSDK\BIN\LIB.
o  Em seguida configure o CLASSPATH para que ele reconheça o arquivo comm.jar.

RECONHECENDO AS PORTAS

//....
Enumeration listaDePortas;
listaDePortas = CommPortIdentifier.getPortIdentifiers();
//...
//..
 int i = 0; portas = new String[10];
while (listaDePortas.hasMoreElements()) {
  CommPortIdentifier ips = (CommPortIdentifier)listaDePortas.nextElement(); portas[i] = ips.getName();
  i++;
 }
//..

ABRINDO AS PORTAS

O método getPortIdentifier(String porta) da classe CommPortIdentifier retorna um identificador da porta escolhida. Precisamos instanciar um objeto para receber esse identificador:
 

CommIdentifier cp = CommPortIdentifier.getPortIdentifier(minhaPortaEscolhida);

Em seguida criamos uma instância da classe SerialPort utilizando o identificador. Note que uma conversão deverá ser feita. A porta só pode ser instanciada através desse “casting” e ao mesmo tempo abrimos a porta para comunicação:

SerialPort porta = (SerialPort)cp.open("SComm",timeout);

O método open() tem como parâmetros o nome da classe principal (faça isso para não gerar conflitos) e o valor desejado para timeout. Em seguida, precisamos atribuir fluxos de entrada e saída. Basta utilizar as classes Abstratas OutputStream e InputStream, já que a classe SerialPort implementa os métodos de entrada e saída dessas classes para comunicação serial. Para ler dados na porta serial:

InputStream entrada = porta.getInputStream();

E para escrever dados na porta serial:

OutputStream saida = porta.getOutputStream();

Em seguida precisamos configurar os parâmetros de comunicação serial, para isso utilizamos o método setSerialPortParams:
 

porta.setSerialPortParams(baudrate, porta.DATABITS_8, porta.STOPBITS_2, porta.PARITY_NONE);

ENVIANDO DADOS

Depois de configurar a porta para comunicar e definido o fluxo de saída, podemos comunicar os dados. Isso é bem simples:

String msg = “Olá Mundo!”;
saida.write(msg.getBytes());
Thread.sleep(100);
saida.flush();

RECEBENDO DADOS

porta.addEventListener(this);
porta.notifyOnDataAvailable(true);
public void serialEvent(SerialPortEvent ev){
  switch (ev.getEventType()) {
    //…
   case SerialPortEvent.DATA_AVAILABLE: byte[] bufferLeitura = new byte[20];
     try { while ( entrada.available() > 0 ) { nodeBytes = entrada.read(bufferLeitura);
  }
  String Dadoslidos = new String(bufferLeitura);
  if (bufferLeitura.length == 0) {
    System.out.println("Nada lido!");
  } else
       if (bufferLeitura.length == 1 ){
         System.out.println("Apenas um byte foi lido!");
      } else {
           System.out.println(Dadoslidos);
      }
    } catch (Exception e) {
         System.out.println("Erro durante a leitura: " + e );
    }
   System.out.println("n.o de bytes lidos : " + nodeBytes ); break; }
}