我将蓝牙接收器与笔记本电脑连接。它在comport 23继续向我发送数据。但我的代码没有检测到这个comport。它给了我一个使用中的列表。任何人都知道这个问题的解决方案。
import java.io.*;
import gnu.io.*;
import java.util.*;
public class PortReader implements SerialPortEventListener {
static Enumeration ports;
static CommPortIdentifier pID;
InputStream inStream;
SerialPort serPort;
public PortReader() throws Exception{
serPort = (SerialPort) pID.open("PortReader", 2000);
inStream = serPort.getInputStream();
serPort.addEventListener(this);
serPort.notifyOnDataAvailable(true);
serPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
}
public void serialEvent(SerialPortEvent event) {
switch (event.getEventType()) {
case SerialPortEvent.BI:
System.out.println("SerialPortEvent.BI occurred");
case SerialPortEvent.OE:
System.out.println("SerialPortEvent.OE occurred");
case SerialPortEvent.FE:
System.out.println("SerialPortEvent.FE occurred");
case SerialPortEvent.PE:
System.out.println("SerialPortEvent.PE occurred");
case SerialPortEvent.CD:
System.out.println("SerialPortEvent.CD occurred");
case SerialPortEvent.CTS:
System.out.println("SerialPortEvent.CTS occurred");
case SerialPortEvent.DSR:
System.out.println("SerialPortEvent.DSR occurred");
case SerialPortEvent.RI:
System.out.println("SerialPortEvent.RI occurred");
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
System.out.println("SerialPortEvent.OUTPUT_BUFFER_EMPTY occurred");
break;
case SerialPortEvent.DATA_AVAILABLE:
System.out.println("SerialPortEvent.DATA_AVAILABLE occurred");
byte[] readBuffer = new byte[20];
try {
while (inStream.available() > 0) {
int numBytes = inStream.read(readBuffer);
}
System.out.print(new String(readBuffer));
} catch (IOException ioe) {
System.out.println("Exception " + ioe);
}
break;
}
}
public static void main(String[] args) throws Exception{
ports = CommPortIdentifier.getPortIdentifiers();
while (ports.hasMoreElements()) {
pID = (CommPortIdentifier) ports.nextElement();
System.out.println("Port " + pID.getName());
if (pID.getPortType() == CommPortIdentifier.PORT_SERIAL) {
if (pID.getName().equals("COM23")) {
PortReader pReader = new PortReader();
System.out.println("COM23 found");
}
}
}
}
}
答案 0 :(得分:0)
Oracle's Doku sais:
获取一个枚举对象,该对象包含系统中每个端口的CommPortIdentifier对象。
因此,如果未在此处列出所需的端口,则可能未正确设置。我先检查一下。
其次,它的名称可能与您的预期不同。您应该打印出该列表,看看是否有一个名为相似但不完全符合您预期的端口。
答案 1 :(得分:0)
您是否在设备管理器中看到了COM端口? (“控制面板” - >“设备管理器” - >“端口”)如果没有,则说明您的蓝牙驱动程序没有按预期创建COM端口(SPP)。
如果你确实在那里看到它,那么你可以尝试使用-Dgnu.io.rxtx.SerialPorts=COM23
系统属性暂时覆盖通用端口枚举,看看你是否连接。
有关gnu.io.rxtx.SerialPorts
属性的更多信息:
此外,Rxtx有不同的版本和包。一些分支和最新版本的Rxtx修改了如何在Windows上枚举端口,所以我认为之前存在问题。请在此处查看Rxtx下载(和分叉):http://rxtx.qbang.org/wiki/index.php/Download。
最后,请确保如果您在x64系统上使用,那么您使用的是x64二进制文件。