1

Mac (OSX 10.8) で Java 用の rxtx JAR ファイルを使用しようとしています。RXTXcomm.jarlibrxtxSerial.jnilibおよび付随.soするファイルを にインストールしました/Library/Java/Extensions。サンプルコードを実行しようとしています: http://arduino.cc/playground/Interfacing/Java

cannot find symbolしかし、大量のエラーメッセージ が表示されるため、何かが欠けているようです。

ここにいくつかあります:

SerialTest.java:3: cannot find symbol
symbol  : class CommPortIdentifier
location: package gnu.io
import gnu.io.CommPortIdentifier;
             ^
SerialTest.java:4: cannot find symbol
symbol  : class SerialPort
location: package gnu.io
import gnu.io.SerialPort;

私のマシンにインストールされている Java 内で欠けている基本的なものはありますか? Xcode 4.5 をインストールしたばかりなので、この単純なコードを実行するためのすべてが揃っていると思います。

ライブラリを同じディレクトリに配置するように頼まれました。同封されているのは、実行中lsjavacコマンドです。

$javac -classpath RXTXcomm.jar:. SerialTest.java 

SerialTest.java:3: cannot find symbol
symbol  : class CommPortIdentifier
location: package gnu.io
import gnu.io.CommPortIdentifier;
             ^
SerialTest.java:4: cannot find symbol
symbol  : class SerialPort
location: package gnu.io
import gnu.io.SerialPort;
             ^
SerialTest.java:5: cannot find symbol
symbol  : class SerialPortEvent
location: package gnu.io
import gnu.io.SerialPortEvent; 
             ^
SerialTest.java:6: cannot find symbol
symbol  : class SerialPortEventListener
location: package gnu.io
import gnu.io.SerialPortEventListener; 
             ^
SerialTest.java:9: cannot find symbol
symbol: class SerialPortEventListener
public class SerialTest implements SerialPortEventListener {
                                   ^
SerialTest.java:10: cannot find symbol
symbol  : class SerialPort
location: class SerialTest
    SerialPort serialPort;
    ^
SerialTest.java:83: cannot find symbol
symbol  : class SerialPortEvent
location: class SerialTest
    public synchronized void serialEvent(SerialPortEvent oEvent) {
                                         ^
SerialTest.java:27: cannot find symbol
symbol  : class CommPortIdentifier
location: class SerialTest
        CommPortIdentifier portId = null;
        ^
SerialTest.java:28: cannot find symbol
symbol  : variable CommPortIdentifier
location: class SerialTest
        Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
                               ^
SerialTest.java:32: cannot find symbol
symbol  : class CommPortIdentifier
location: class SerialTest
            CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
            ^
SerialTest.java:32: cannot find symbol
symbol  : class CommPortIdentifier
location: class SerialTest
            CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
                                             ^
SerialTest.java:48: cannot find symbol
symbol  : class SerialPort
location: class SerialTest
            serialPort = (SerialPort) portId.open(this.getClass().getName(),
                          ^
SerialTest.java:53: cannot find symbol
symbol  : variable SerialPort
location: class SerialTest
                    SerialPort.DATABITS_8,
                    ^
SerialTest.java:54: cannot find symbol
symbol  : variable SerialPort
location: class SerialTest
                    SerialPort.STOPBITS_1,
                    ^
SerialTest.java:55: cannot find symbol
symbol  : variable SerialPort
location: class SerialTest
                    SerialPort.PARITY_NONE);
                    ^
SerialTest.java:84: cannot find symbol
symbol  : variable SerialPortEvent
location: class SerialTest
        if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
                                     ^
16 errors
MacBook-Pro:src user$ ls
RXTXcomm.jar        comm.jar        librxtxSerial.jnilib
SerialTest.java     librxtxParallel.so  librxtxSerial.so
MacBook-Pro:src user$ 

これを機能させるために別の JAR が不足しているということですか? にこれらのクラスがありませんRXTXcomm.jar

4

3 に答える 3

5

RXTX ライブラリは 2 つの部分で構成されています。1 つ目は Java/Jar 部分、2 つ目はネイティブ ライブラリです。

rxtxJava 実行可能ファイルがネイティブライブラリを見つけられない場合、エラーが発生します。したがって、このネイティブ ライブラリがどこにあるかを確認する必要があります。JNI ライブラリのファイル拡張子は、.jnilibまたは.dylib. 次に、2 つの可能性があります。

  • 最初の可能性は、Java を開始するディレクトリにネイティブ ライブラリをコピーすることです (Eclipse を使用する場合、これはプロジェクト ディレクトリです)。

  • 2 番目の可能性は、Java を起動し、ネイティブ ライブラリが配置されているライブラリ パスを指定することです。

java -Djava.library.path=".:/Users/bill/rxtx/jni" MyClass 
于 2012-10-02T11:35:16.473 に答える
1

上記のヒントを試しても問題が解決しない場合は、32 ビットの RXTX ライブラリを使用している可能性があります。32 ビット アプリを実行できる Mac では、クライアントの Java VM を強制的に 32 ビット モードで動作させることができます (一部の Java 専門家の意見とは対照的です)。UnsatisfiedLinkErrorオプションを指定して Java を呼び出すだけで、この方法で を取り除く-d32ことができました (Java システム プロパティではないため、小文字に注意してください)。

Atmel プロセッサ用の古い RS-232 ベースのプログラマと通信するための私の古いプログラムは、うまく起動し、64 ビット環境で正常に動作します。ただし、新しい Mac と 64 ビット専用環境では、そのオプションを使用できない場合があることに注意してください。これが、Core 2 Duo (Core Duo からDell ノートブック移植プロセッサ) Mac Mini。

于 2012-12-09T18:12:26.887 に答える
0

プロジェクト プロパティ パネルを開き、ライブラリに移動し、[コンパイル] ボタン オプションを選択して、[Jar/フォルダの追加] をクリックし、RXTXComm.jar をリストに追加します。それは私のために働きます。適切な場所に配置したため、コンパイラはライブラリを認識し、Netbeans がプロジェクトのプロパティ パネルで「コンパイル時のライブラリはすべてのライブラリ カテゴリに伝播されます」と言うように、実行時に同じ可視性を期待しますが、そうはなりません。

于 2012-12-06T01:46:24.650 に答える