0

我用我的笔记本电脑连接了我的蓝牙接收器。它在 comport 23 continue 处向我发送数据。但我的代码未检测到此 comport。它给了我一个正在使用的 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");
        }
      }
    }
  }

}
4

2 回答 2

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 二进制文件。

于 2012-10-31T13:26:53.253 回答
0

Oracle 的 Doku说:

获取一个枚举对象,该对象包含系统中每个端口的 CommPortIdentifier 对象。

因此,如果您想要的端口未在此处列出,则可能没有正确设置。我会先检查一下。

其次,它的名称可能与您所期望的不同。您应该打印出该列表以查看是否有一个名为类似但不完全符合您期望的端口。

于 2012-10-31T13:17:58.923 回答