有关串口读取数据的问题。
我在运行 commBean1.Initialize();的时候会出现如下的异常:
javax.comm.NoSuchPortException
at javax.comm.CommPortIdentifier.getPortIdentifier(CommPortIdentifier.java:105)
at study.CommBean.Initialize(CommBean.java:32)
at study.CommBean.main(CommBean.java:23)
也就说CommPortIdentifier.getPortIdentifier(portName);返回的是null;
我用的是IBM THINKPAD R31 ,这个机器本身是没有串口的,但我用USB转串的线。
因为我用超级终端是可以打开COM3的,而且可以从COM3上面读取数据。
谁能帮我解释,给分。
import javax.comm.*;
import java.io.*;
import java.util.*;
public class CommBean {
protected SerialPort serialPort;
private static String portName;
private static OutputStream out;
private static InputStream in;
private CommPortIdentifier portId;
private BufferedInputStream reader;
private String readString;
private int numBytes=0;
public CommBean(int portID) {
portName="COM"+portID;
}
public static void main(String[] args) {
CommBean commBean1 = new CommBean(3);
commBean1.Initialize();
}
public boolean Initialize(){
boolean InitSuccess=true;
boolean InitFail=false;
try{
System.out.println(portName);
portId=CommPortIdentifier.getPortIdentifier(portName);
try{
serialPort=(SerialPort)portId.open("Serial_Communication", 2000);
}catch(PortInUseException e){
System.out.println("端口被占用");
return InitFail;
}
try{
in=serialPort.getInputStream();
reader=new BufferedInputStream(in);
out=serialPort.getOutputStream();
}catch (IOException e){
System.out.println("创建流失败");
return InitFail;
}
try{
serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
}catch(UnsupportedCommOperationException e){
System.out.println("参数设置失败");
return InitFail;
}
}catch (NoSuchPortException e){
System.out.println("失败");
System.out.println(e.getMessage());
return InitFail;
}
System.out.println("成功");
return InitSuccess;
}
public void ReadPort(){
try{
serialPort.addEventListener(new commListener());
}catch(Exception e){}
serialPort.notifyOnDataAvailable(true);
}
public void StopRead(){
try{
serialPort.removeEventListener();
}catch(Exception e){}
serialPort.notifyOnDataAvailable(false);
}
public void WritePort(String Msg){
try{
for(int i=0;i<Msg.length();i++)
out.write(Msg.charAt(i));
}catch(IOException e){
}
}
public void ClosePort(){
serialPort.close();
}
public class commListener implements SerialPortEventListener{
public void serialEvent(SerialPortEvent event) {
byte[] readBuffer=new byte[100];
if(event.getEventType()==SerialPortEvent.DATA_AVAILABLE){
try {
while (in.available() > 0) {
numBytes = reader.read(readBuffer);
}
readString+= new String(readBuffer,0,numBytes);
//处理自己的字符串
}catch (IOException e) {}
}
}
}
}