有关串口读取数据的问题。

zceast zceast 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我在运行 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) {}
}
}
}

}
...全文
评论 12
收藏 已收藏
分享
返回顶部
zceast
Java SE 62,621 成员 307,251 内容