小弟初接触java串口,写了一段代码,电脑串口接一个刷卡器,想实现功能:当没有卡接近时,打印“请刷卡”,当有卡接近刷卡器时候打印“您的卡号是:”+*******,自己写了些代码,但总出问题,代码如下
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.comm.*;
public class ReadComm implements Runnable,SerialPortEventListener
{
static CommPortIdentifier portId;
static Enumeration portList;
InputStream inputStream;
SerialPort serialPort;
Thread readThread;
String str = "";
public static void main(String[] args)
{
portList = CommPortIdentifier.getPortIdentifiers();
while(portList.hasMoreElements())
{
portId = (CommPortIdentifier) portList.nextElement();
if(portId.getPortType()==CommPortIdentifier.PORT_SERIAL)
{
if(portId.getName().equals("COM2"))
{
ReadComm RC = new ReadComm();
}
}
}
}
public ReadComm()
{
try {
serialPort = (SerialPort) portId.open("ReadCommApp", 2000);
} catch (PortInUseException e) {
e.printStackTrace();
}
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {
e.printStackTrace();
}
serialPort.notifyOnDataAvailable(true);
try {
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e) {
e.printStackTrace();
}
readThread = new Thread(this);
readThread.start();
}
public void run()
{
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void serialEvent(SerialPortEvent event)
{
byte[] readBuffer = new byte[60];
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
try {
while(inputStream.available()>0)
{
int numBytes = inputStream.read(readBuffer);
}
str = new String(readBuffer);
if(str.equals("")||str==null)
{
System.out.println("请刷卡:");
}
else
{
System.out.println("您的卡号是:"+str);
ReadComm RT = new ReadComm();
RT.ClosePort();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void ClosePort()
{
serialPort.close();
}
}
希望大哥们给指点指点。
[code="java"]if (str.equals("") || str == null) {
System.out.println("请刷卡:");
}[/code]
这个地方也要改下(与此问题无题)。不然就NullPointerException了
[code="java"]if (str == null || str.equals("")) {
System.out.println("请刷卡:");
}[/code]
[code="java"]while (inputStream.available() > 0) {
int numBytes = inputStream.read(readBuffer);
}[/code]
这里可能有问题!
docs里这样说:
The available method for class InputStream always returns 0.
InputStream类里的available方法始终返回0
This method should be overridden by subclasses.
这个方法应该被子类重写.
所以这里应该用InputStream的子类