Problema con puerto Serie
Este programa me esta sacando un error en el campo entrada, no puedo solucionarlo. ALGUIEN ME PUEDE AYUDAR.
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at bascula.Puerto.<init>(Puerto.java:37)
EL PROGRAMA ES EL SIGUIENTE.
package bascula;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.comm.*;
public class Puerto implements Runnable,SerialPortEventListener {
static CommPortIdentifier idPuerto;
static Enumeration listaPuertos;
InputStream entrada;
SerialPort puertoSerie;
Thread tLectura;
private String lectura;
public Puerto() { // Si el puerto no está en uso, se intenta abrir
listaPuertos = CommPortIdentifier.getPortIdentifiers();
while( listaPuertos.hasMoreElements() ) {
idPuerto = (CommPortIdentifier)listaPuertos.nextElement();
if( idPuerto.getPortType() == CommPortIdentifier.PORT_SERIAL ) {
if( idPuerto.getName().equals("COM1") ) { // WINDOWS
// Lector del puerto, se quedará esperando a que llegue algo al puerto
System.out.println("puerto encontrado " + idPuerto.getName());
}
}
}
try {
puertoSerie = (SerialPort)idPuerto.open( "AplLectura",2000 );
} catch( PortInUseException e ) {}
// Se obtiene un canal de entrada
try {
entrada = puertoSerie.getInputStream();
System.out.println("datos" + entrada);
} catch( IOException e ) {
System.out.println("Sin datos" + e);
}
// Añadimos un receptor de eventos para estar informados de lo que suceda en el puerto
try {
puertoSerie.addEventListener( this );
} catch( TooManyListenersException e ) {}
// Hacemos que se nos notifique cuando haya datos disponibles para lectura en el buffer de la puerta
puertoSerie.notifyOnDataAvailable( true );
// Se fijan los parámetros de comunicación del puerto
try {
puertoSerie.setSerialPortParams( 4800,
SerialPort.DATABITS_7,
SerialPort.STOPBITS_2,
SerialPort.PARITY_EVEN );
} 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( this );
tLectura.start();
}
public void run() {
try {
Thread.sleep(2000);
} catch( InterruptedException e ) {}
}
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;
// Cuando haya datos disponibles se leen y luego se imprime lo recibido en la consola
case SerialPortEvent.DATA_AVAILABLE:
byte[] readBuffer = new byte[6];
try {
while (entrada.available() > 0) {
int numBytes = entrada.read(readBuffer);
}
lectura = new String(readBuffer);
System.out.println(lectura);
} catch (IOException e) {}
break;
}
}
public String getLectura() {
return lectura;
}
}
//------------------------------------------ Final del fichero java1902.java
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at bascula.Puerto.<init>(Puerto.java:37)
EL PROGRAMA ES EL SIGUIENTE.
package bascula;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.comm.*;
public class Puerto implements Runnable,SerialPortEventListener {
static CommPortIdentifier idPuerto;
static Enumeration listaPuertos;
InputStream entrada;
SerialPort puertoSerie;
Thread tLectura;
private String lectura;
public Puerto() { // Si el puerto no está en uso, se intenta abrir
listaPuertos = CommPortIdentifier.getPortIdentifiers();
while( listaPuertos.hasMoreElements() ) {
idPuerto = (CommPortIdentifier)listaPuertos.nextElement();
if( idPuerto.getPortType() == CommPortIdentifier.PORT_SERIAL ) {
if( idPuerto.getName().equals("COM1") ) { // WINDOWS
// Lector del puerto, se quedará esperando a que llegue algo al puerto
System.out.println("puerto encontrado " + idPuerto.getName());
}
}
}
try {
puertoSerie = (SerialPort)idPuerto.open( "AplLectura",2000 );
} catch( PortInUseException e ) {}
// Se obtiene un canal de entrada
try {
entrada = puertoSerie.getInputStream();
System.out.println("datos" + entrada);
} catch( IOException e ) {
System.out.println("Sin datos" + e);
}
// Añadimos un receptor de eventos para estar informados de lo que suceda en el puerto
try {
puertoSerie.addEventListener( this );
} catch( TooManyListenersException e ) {}
// Hacemos que se nos notifique cuando haya datos disponibles para lectura en el buffer de la puerta
puertoSerie.notifyOnDataAvailable( true );
// Se fijan los parámetros de comunicación del puerto
try {
puertoSerie.setSerialPortParams( 4800,
SerialPort.DATABITS_7,
SerialPort.STOPBITS_2,
SerialPort.PARITY_EVEN );
} 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( this );
tLectura.start();
}
public void run() {
try {
Thread.sleep(2000);
} catch( InterruptedException e ) {}
}
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;
// Cuando haya datos disponibles se leen y luego se imprime lo recibido en la consola
case SerialPortEvent.DATA_AVAILABLE:
byte[] readBuffer = new byte[6];
try {
while (entrada.available() > 0) {
int numBytes = entrada.read(readBuffer);
}
lectura = new String(readBuffer);
System.out.println(lectura);
} catch (IOException e) {}
break;
}
}
public String getLectura() {
return lectura;
}
}
//------------------------------------------ Final del fichero java1902.java