Tema: JAva rs-232
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/04/2007, 03:53
antonkas
 
Fecha de Ingreso: abril-2007
Mensajes: 5
Antigüedad: 17 años
Puntos: 0
JAva rs-232

Hola:
quiero leer datos que me llegan desde la linea serie con java. he btenido el siguiente codigo pero me da errores si alguien me puede ayudar lo agradeceria.

public class Puerto_serie {
static CommPortIdentifier idPuerto;
FileOutputStream out;
File fitxategia;
int vaciado;
boolean jasotzen=false;
static Enumeration listaPuertos;
InputStream entrada;
String data,paketea="",gordetakoa="";
boolean bidalita=false,hutsik=false;
SerialPort puertoSerie;
Thread tLectura;
FileInputStream in;
int kontordua=0;
int ktrama=0;
byte[] ordua=new byte[8];
byte[] auxordua=new byte[8];
// En este ejemplo implementa un thread que es el que se encarga de
// que la aplicación se quede esperando en el puerto que se haya
// abierto a que se reciban datos.
// Primero abre el puerto y luego le fija los parámetros

public Puerto_serie() {

System.out.println("konstruktorera sartzen da?");
// Si el puerto no está en uso, se intenta abrir
try {
// puertoSerie = (SerialPort)idPuerto.open( "Puerto_serie",2000 );
puertoSerie = (SerialPort)idPuerto.open( "Puerto_serieApp",2000 );
System.out.println("linea seriea zabaldu da");
} catch( PortInUseException e ) {}
// Se obtiene un canal de entrada
try {
entrada = puertoSerie.getInputStream();
System.out.println("Sarrerako stream bat lortu da");
} catch( IOException e ) {}

// Añadimos un receptor de eventos para estar informados de lo
// que suceda en el puerto
// try {
// } catch( TooManyListenersException e ) {}

// Hacemos que se nos notifique cuando haya datos disponibles
// para lectura en el buffer de la puerta
try {
//puertoSerie.addEventListener(SerialPortEventListen er);
puertoSerie.addEventListener((SerialPortEventListe ner)this);
// puertoSerie.addEventListener(this);

System.out.println("addEventlistener-era heldu naz");
} catch (TooManyListenersException e) {
// TODO
}
puertoSerie.notifyOnDataAvailable( true );

// Se fijan los parámetros de comunicación del puerto
try {
puertoSerie.setSerialPortParams( 9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE );
System.out.println("linea seriea konfiguratu da");
} catch( UnsupportedCommOperationException e ) {}


// Se crea y lanza el thread que se va a encargar de quedarse
// esperando en la puerta a que haya datos disponibles

tLectura = new Thread((Runnable)this);
tLectura.start();

}


public void run() {
try {
// En los threads, hay que procurar siempre que haya algún
// método de escape, para que no se queden continuamente
// bloqueados, en este caso, la comprobación de si hay datos
// o no disponibles en el buffer de la puerta, se hace
// intermitentemente

Thread.sleep( 20000 );
} catch( InterruptedException e ) {}

}


public void serialEvent( SerialPortEvent _ev ) {
try{
fitxategia= new File("fitxategia.txt");//Portu serietik iristen diren datuak fitxategi honetan gordeko dira
out=new FileOutputStream (fitxategia,true);
in=new FileInputStream(fitxategia);
}catch(FileNotFoundException e){}


switch( _ev.getEventType() ) {
// La mayoría de los eventos no se trata, éstos son los
// que se producen por cambios en las líneas de control del
// puerto que se está monitorizando
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;
// Cuando haya datos disponibles se leen y luego se
// imprime lo recibido en la consola
case SerialPortEvent.DATA_AVAILABLE:
byte[] bufferLectura = new byte[1];
try {
while( entrada.available() > 0 )
{
int nBytes = entrada.read( bufferLectura );
System.out.print( new String(bufferLectura,0,nBytes));
if(bufferLectura[0]=='1')
jasotzen=true;
if(((bufferLectura[0]!='U')&(bufferLectura[0]!='.')&(jasotzen==true))|(bufferLectura[0]=='\n')|(bufferLectura[0]=='\r'))
{
paketea=paketea+(new String(bufferLectura));
}
if( bufferLectura[0]=='.')
{
paketea=paketea+" ";
Date hoy= new Date();
data = hoy.toString();
System.out.println(data);
paketea=paketea+data;
paketea=paketea+".";
}
}

}catch( IOException e ) {}
}


}

public static void main( String[] args ) {
// Lista de los puertos disponibles en la máquina. Se carga en el
// mimo momento en que se inicia la JVM de Java

listaPuertos = CommPortIdentifier.getPortIdentifiers();
//System.out.println(listaPuertos);
//idPuerto = (CommPortIdentifier)listaPuertos.nextElement();
//System.out.println(idPuerto);
while( listaPuertos.hasMoreElements() ) {
System.out.println("while-era sartu naz");

idPuerto = (CommPortIdentifier)listaPuertos.nextElement();
System.out.println(idPuerto);
if( idPuerto.getPortType() == CommPortIdentifier.PORT_SERIAL ) {
// if( idPuerto.getName().equals("/dev/term/a") ) { // UNIX
if( idPuerto.getName().equals("COM1") ) { // WINDOWS
// Lector del puerto, se quedará esperando a que llegue algo
// al puerto
System.out.println(idPuerto.getName());
Puerto_serie lector;
lector = new Puerto_serie();

}
}


}

}
}
El error me da cuando lo ejecuto compilar lo hace bien.

java.lang.ClassCastException: proiektua.Puerto_serie
at proiektua.Puerto_serie.<init>(Puerto_serie.java:59 )
at proiektua.Puerto_serie.main(Puerto_serie.java:175)