7

おはようございます、

Windows764ビットでのrxtxの使用/インストールで問題が発生します。以前はx86winXPシステムで作業しましたが、問題はありませんでした。何らかの理由でこの新しいシステムに再インストールしたため、rxtxはポートを見つけることができません。Cloud Hopperの64ビットネイティブライブラリであるrxtxインストールを試し、すべてのrxtxファイルを削除して最初からやり直しました。RXTXcomm.jarが見つかり、NetBeansでパッケージを参照できますが、実装が壊れているか、見つからないようです。

この行は、実行時に毎回失敗します:

comPort = "COM1";
portId = CommPortIdentifier.getPortIdentifier(comPort);

そして、NoSuchPortExceptionをスローします。

これを使用してシリアルポートを一覧表示しても、何も生成されません。

Enumeration ports = CommPortIdentifier.getPortIdentifiers();
String portArray[] = null;
while (ports.hasMoreElements()) {
    CommPortIdentifier port = (CommPortIdentifier) ports.nextElement();
    System.out.println(port.getName());
} 

シリアルポートが利用可能かどうかを確認したので、この時点で、Windows764ビットのネイティブライブラリが単純に壊れているのではないかと思います。

誰かがWindows764ビットでRXTX2.2pre2を正常に使用しましたか?

コンストラクターの問題のあるコードセクション:

public SerialControl(String name, String comPort, int baudrate, int databits, String     parity, double stopbits) throws Exception {
    int stop = 0;
    int data = 0;
    int par = 0;

    this.name=name;

    // Sanity checks and interpretation
    if (baudrate > 115200 || baudrate < 300) {
        System.err.println(name+": constructor(): Invalid baudrate "+baudrate);
        throw new Exception("Invalid baudrate, " + baudrate);
    }

    if (databits >= 5 && databits <= 8) {
        switch (databits) {
            case 5:
                data = SerialPort.DATABITS_5;
                break;
            case 6:
                data = SerialPort.DATABITS_6;
                break;
            case 7:
                data = SerialPort.DATABITS_7;
                break;
            case 8:
                data = SerialPort.DATABITS_8;
                break;
            default:
                System.err.println(name+": constructor(): Invalid data bits, switched " + databits);
                throw new Exception("Invalid data bits, switched " + databits);
        }
    } else {
        throw new Exception("Invalid data bits=" + databits);
    }

    if (stopbits >= 1.0 && stopbits <= 2.0) {

        if (stopbits == 1.0) {
            stop = SerialPort.STOPBITS_1;
        } else if (stopbits == 1.5) {
            stop = SerialPort.STOPBITS_1_5;
        } else if (stopbits == 2.0) {
            stop = SerialPort.STOPBITS_2;
        } else {
            System.err.println(name+": constructor(): Invalid stop bits, switched " + stopbits);
            throw new Exception("Invalid stop bits, switched " + stopbits);
        }
    } else {
        System.err.println(name+": constructor(): Invalid stop bits, switched " + stopbits);
        throw new Exception("Invalid stop bits " + stopbits);
    }

    switch (parity) {
        case "S":
            par = SerialPort.PARITY_SPACE;
            break;
        case "E":
            par = SerialPort.PARITY_EVEN;
            break;
        case "M":
            par = SerialPort.PARITY_MARK;
            break;
        case "O":
            par = SerialPort.PARITY_ODD;
            break;
        case "N":
            par = SerialPort.PARITY_NONE;
            break;
        default:
            System.err.println(name+": constructor(): Invalid parity, switched " + parity);
            throw new Exception("Invalid parity, switched " + parity);
    }

    // Inits
    // Try to find the port specified
    try {
        portId = CommPortIdentifier.getPortIdentifier(comPort);
    } catch (Exception e) {
        System.err.println(name+": constructor(): No such port \"" + comPort+"\"");
        e.printStackTrace();
        throw e;
    }

    // Open the port
    try {
        serialPort = (SerialPort) portId.open("User Port", 2000);
    } catch (PortInUseException e) {
        System.err.println(name+": constructor(): Could not open port " + comPort);
        throw e;
    }

    // Grab the input stream
    try {
        inputStream = serialPort.getInputStream();
    } catch (IOException e) {
        System.err.println(name+": constructor(): Could not get input stream for " + comPort);
        throw e;
    }

    // Set the serial port parameters, no flow control
    try {
        serialPort.setSerialPortParams(baudrate, data, stop, par);
        serialPort.setDTR(false);
        serialPort.setRTS(false);
    } catch (UnsupportedCommOperationException e) {
        System.err.println(name+": constructor(): Error initializing " + comPort);
        throw e;
    }
}
4

2 に答える 2

9

私は同じ問題を抱えています。私はEclipseをプログラミング用のIDEとして使用していますが、公式wikiでこの代替構成を見つけました:

  1. RXTXcomm.jar をプロジェクトの lib ディレクトリにコピーします。
  2. パッケージ エクスプローラーを lib フォルダーに移動し、RXTXcomm.jar を右クリックします。ビルド パス | ビルドされたパスに追加
  3. rxtxSerial.dll および rxtxParallel.dll ファイルをプロジェクトのルート ディレクトリにコピーします。
  4. 実行中 | 実行構成 | クラスパスタブ | ユーザー エントリ | 高度な | フォルダを追加し、プロジェクトのルート フォルダを選択します
  5. これはEclipseで実行するだけで十分なはずです。実行可能なjarをデプロイするときは、dllがjarと同じフォルダーにあることを確認してください(JVMはクラスパスとしてそれを想定しています)

(これは私の最初の回答です。外部リンクを投稿できるかどうかはわかりませんが、5つのステップはhttp://rxtx.qbang.org/wiki/index.php/Using_RXTX_In_Eclipseからのものです)

それが役立つことを願っています!

于 2012-11-20T16:49:43.500 に答える
2

Windows 7 と 64 ビット バージョンの Java および RXTX (クラウドホッパー バージョン) を使用して動作するようです

ここに画像の説明を入力

本当に COM1 を持っていますか?

于 2012-08-29T16:38:42.710 に答える