Pessoal,
tudo bem?
Bem, estou tentando fazer uma rotina para ler a porta serial do pc no Windows XP mas não estou conseguindo.
Bem, acontece que quando mando listar ele lista COM1 e COM3; ótimo, lista OK.
No gerenciador de dispositivos aparece a COM1 como a porta serial disponível e meu modem está ligado à COM3.
Na hora que eu vou tentar abrir a porta serial ele dá o erro:
O código eu baseei em um exemplo da sun, disponível em http://java.sun.com/developer/releases/javacomm/SimpleRead.java
E meu código vem a seguir:
import javax.comm.*;
import java.util.Enumeration;
import java.util.TooManyListenersException;
import java.io.InputStream;
import java.io.IOException;
public class LeSerial implements Runnable,SerialPortEventListener //evento para ler a porta serial
{
static SerialPort serialPort;
static CommPortIdentifier portId;
InputStream inputStream;
Enumeration portList;
public LeSerial()
{
try
{
portId = CommPortIdentifier.getPortIdentifier("COM1");
}
catch(NoSuchPortException e)
{
System.out.println("Porta não encontrada : COM1 \n");
e.printStackTrace();
}
try
{
serialPort = (SerialPort)portId.open("LeSerial",2000); //nome da aplicação que abre a porta e timeout
}
catch(PortInUseException e)
{
System.out.println("A porta COM1 está em uso!");
e.printStackTrace();
:arrow: Está entrando aqui!
}
try
{
inputStream = serialPort.getInputStream();
}
catch(IOException e)
{
e.printStackTrace();
}
try
{
serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
}
catch(UnsupportedCommOperationException e)
{
e.printStackTrace();
}
try
{
serialPort.addEventListener(this);
}
catch(TooManyListenersException e)
{
System.out.println("Listener cheio");
}
serialPort.notifyOnDataAvailable(true); //acorda o sleep da thread.
Thread threadLeitura = new Thread(this);
threadLeitura.start();
}
public static void main(String[] args)
{
LeSerial leSerial = new LeSerial();
}
public void run()
{
try
{
Thread.sleep(10000); //dormir por 10 segundos
}
catch(InterruptedException e)
{
System.out.println("acordou forçado");
}
}
public void serialEvent(SerialPortEvent event)
{
if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE)
{
byte[] readBuffer = new byte[20];
try
{
while (inputStream.available()>0)
{
int numBytes = inputStream.read(readBuffer);
}
System.out.println(new String(readBuffer));
}
catch(IOException e)
{
System.out.println("Erro de leitura da porta!");
e.printStackTrace();
}
}
}
}
O meu caso é o seguinte:
Estou tentando fazer um palm comunicar via IR com um modem externo (pegasus III) de um pc.
Pergunta: O Windows barra a leitura da porta serial??
Pergunta2: Alguma sugestão para fazer isso melhor?
Obrigado.