Java 复合编程错误
我将蓝牙接收器与笔记本电脑连接。它在组件23处向我发送数据。但me代码未检测到此组件。它给了我一个正在使用的组件列表。任何人都知道这个问题的解决办法Java 复合编程错误,java,bluetooth,serial-port,Java,Bluetooth,Serial Port,我将蓝牙接收器与笔记本电脑连接。它在组件23处向我发送数据。但me代码未检测到此组件。它给了我一个正在使用的组件列表。任何人都知道这个问题的解决办法 import java.io.*; import gnu.io.*; import java.util.*; public class PortReader implements SerialPortEventListener { static Enumeration ports; static CommPortIdentifier
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");
}
}
}
}
}
最高审计机关:
获取枚举对象,该对象包含系统中每个端口的CommPortIdentifier对象
因此,如果您所需的端口未在此处列出,则可能未正确设置。我先检查一下
其次,它的命名可能与您期望的不同。您应该打印出该列表,以查看是否有一个名为类似但与预期不完全相同的端口。您是否看到设备管理器中列出的COM端口?(“控制面板”->“设备管理器”->“端口”)如果没有,则说明蓝牙驱动程序没有按预期创建COM端口(SPP) 如果确实在那里看到它,则可以尝试使用
-Dgnu.io.rxtx.SerialPorts=COM23
系统属性临时覆盖通用端口枚举,以查看是否连接
有关gnu.io.rxtx.SerialPorts
属性的更多信息:
最后,如果在x64系统上使用,请确保使用的是x64二进制文件。列表中有什么?你能给我们看一个打印件吗?是的,我能给我们看我的打印件,它是根据System.out.println(“端口”+pID.getName)的组件号;您确定端口的名称吗?是的,我检查了名称,它们都在使用中,但所有已使用的端口在已使用的端口名称显示中仅显示少数。您使用的蓝牙驱动程序/堆栈/版本是什么?RXTX的哪个版本(包括x32和x64)您正在使用吗?但作为我的蓝牙接收器的属性,它通过comport 23向我发送数据,并且在设备管理器中也可以看到它,但我的枚举对象不是DisAnalysorry先生,我无法获取您的答案,您可以详细说明我在哪里可以使用-Dgnu.io.rxtx.SerialPorts=COM23,并且我可以在设备管理器中看到comport 23支持系统属性
gnu.io.rxtx.SerialPorts
显式指定绕过默认枚举代码的可用com端口。我在答案中添加了更多信息的链接。