0

Bluetoothレシーバーをラップトップに接続しました。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

Oracle の Doku sais:

システム内の各ポートの CommPortIdentifier オブジェクトを含む列挙オブジェクトを取得します。

したがって、目的のポートがそこにリストされていない場合は、正しくセットアップされていない可能性があります。これを最初に確認します。

次に、予想とは異なる名前が付けられる可能性があります。そのリストを印刷して、似たような名前のポートがあるかどうかを確認する必要がありますが、期待どおりではありません。

于 2012-10-31T13:17:58.923 に答える
0

デバイス マネージャに COM ポートが表示されていますか? ("コントロール パネル" -> "デバイス マネージャー" -> "ポート") そうでない場合は、Bluetooth ドライバーが期待どおりに 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 に答える