1

http://www.jcontrol.org/download/readme_rxtx_en.htmlから Windows で rxtx をセットアップする手順に従いました。

私が正確に行ったことは、rxtxSerial.dll を「C:\Program Files\Java\jdk1.6.0_07\jre\bin」にコピーし、RXTXcomm.jar を「C:\Program Files\Java\jdk1.6.0_07\jre\」にコピーすることでした。 lib\ext" (私の JAVA_HOME 変数は C:\Program Files\Java\jdk1.6.0_07\jre に設定されています)

RXTXcomm.jar も eclipse プロジェクトに追加しました。

しかし、実行すると、まだ「NoSuchPortException」と表示されます

開発ライブラリ
=========================================
ネイティブ ライブラリ バージョン = RXTX-2.0-7pre1
Java lib バージョン = RXTX-2.0-7pre1
java.lang.ClassCastException: gnu.io.RXTXCommDriver を gnu.io.RXTXCommDriver のロード中にスローされた gnu.io.CommDriver にキャストできません
gnu.io.NoSuchPortException
    gnu.io.CommPortIdentifier.getPortIdentifier (CommPortIdentifier.java:218) で
    TwoWaySerialComm.connect (TwoWaySerialComm.java:20) で
    TwoWaySerialComm.main (TwoWaySerialComm.java:107) で

私のJavaファイルでは、次のように伝えています。

        試す
        {
            (新しい TwoWaySerialComm()).connect("COM4");
        }

また、Java Comm API も試しました。どちらもシリアルポートを認識できませんが、指示に正しく従ったことは確かです。そこにファイルがあります。

誰かがそれが何であるか考えていますか?

4

10 に答える 10

1

Windows用に特別に実装された代替ソリューションを試すこともできます。利用できるものはたくさんあるはずです。そのうちの1つはhttp://www.caerustech.com/JCommWin32.phpから入手できます。

シュルツ

于 2010-01-25T12:08:23.167 に答える
1

CommPortIdentifier.getPortIdentifiers() を使用できます

システムが検出した可能性のあるすべてのポートを特定します。

于 2008-11-10T07:18:13.020 に答える
1

RXTXに詳しくないのですが、これって普通ですか?

java.lang.ClassCastException: gnu.io.RXTXCommDriver cannot be cast to gnu.io.CommDriver thrown while loading gnu.io.RXTXCommDriver

それ以外の場合、問題は結局ポート自体にあるのではなく、クラス自体にあるのでしょうか? 推測です。

于 2009-04-14T08:44:20.323 に答える
1

rxtxSerial.dll入れてみる

C:\Program Files\Java\jdk1.6.0_07\jre\lib\bin
                                      ^^^
于 2008-11-08T02:37:12.090 に答える
0

システムに COM4 が定義されていないか、アクセスできない可能性があります。ポートの初期化コードを投稿していないため、何が問題なのかを推測するのは困難です。投稿したものはラッパー コードのように見えます。

これは、javax.comm API を使用した作業中の初期化コードです (ただし、serialio.com の SerialPort を使用しています)。

// name comes from config and is "COM1", "COM2", ...
SerialPort port=(SerialPort)CommPortIdentifier.getPortIdentifier(name).open("YourPortOwnerIdHere",5000);      // owner and ms timeout
port.setSerialPortParams(bau,dtb,stb,par);
port.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN|SerialPort.FLOWCONTROL_RTSCTS_OUT);
port.enableReceiveTimeout(1000);

うまくいけば、これはあなたを正しい方向に向けます。

于 2008-11-08T06:46:59.667 に答える
0

あなたの問題は ClassCastException のように見え、他のものではないことに同意します。

Windows の場合、私はhttp://www.engidea.com/blog/informatica/winjcom/winjcom.htmlで「Windows Java Serial Com Port Driver」を使用していますが、セットアップがはるかに簡単です。

どちらの場合も、提案された LIB\BIN ではなく、BIN ディレクトリに DLL が必要です。少なくともそれが私にとってはうまくいっています。私は NetBeans を使用していますが、JDK のさまざまな bin および lib\ext フォルダーに jar と dll を配置すると役立つこともわかりました。

マシンに複数のバージョンの JRE がある場合、使用していると思われるものを使用していない可能性があることに注意してください。また、実際の問題として、jar と dll の両方をさまざまな bin フォルダーと lib\ext フォルダーにコピーするだけの方が役立つことがわかりました。貼り付け、貼り付け、貼り付け操作のみにします。

Windows の場合は、「Windows Java Serial Com Port Driver」をお勧めします。USB シリアル ポートの問題が解決したからです。USBが抜かれるとクラッシュするので、RXTXに適合していました。winjcom はその問題を解決し、他の問題も同様に解決しました。非常に役立つエラー例外があります。

また、シリアル ドライバが最新であることを確認してください。アップデートをダウンロードすると、他のバグが修正されました。-ストッシュ

于 2009-04-21T01:26:51.700 に答える
0

あなたの質問に対して、私のコードは次のとおりです。

if (idPuerto == null)
{
            formulario = form;
            boolean encontrado = false;


            listaPuertos = CommPortIdentifier.getPortIdentifiers();

            while( listaPuertos.hasMoreElements() && encontrado == false )
            {
              idPuerto = (CommPortIdentifier)listaPuertos.nextElement();
              //System.out.println(idPuerto.getName());

              if( idPuerto.getPortType() == CommPortIdentifier.PORT_SERIAL )
              {
                if( idPuerto.getName().equals(RFIDBascApp.ComBasc) )
                {        
                    encontrado = true;
                    logger.AddInfoUser("Puerto serie encontrado");

                  }
                }
              }
于 2010-04-29T10:40:39.157 に答える
0

だったNoSuchPortExceptionので、まず利用可能なすべてのポートで繰り返します。

import gnu.io.CommPortIdentifier;        
import java.util.Enumeration;  

public class ListAvailablePorts {  

    public void list() {  
        Enumeration ports = CommPortIdentifier.getPortIdentifiers();  

        while(ports.hasMoreElements()){  
            CommPortIdentifier port = (CommPortIdentifier) ports.nextElement();
            System.out.println(port.getName());
        }
    }  

    public static void main(String[] args) {  
        new ListAvailablePorts().list();  
    }  
} 
于 2011-02-08T15:46:58.827 に答える
-1

@Pinheiroこれを見てみたいかもしれません

于 2010-12-30T07:04:03.003 に答える