2

フォルダーに入れrxtxcomm.jarましたが、まだこのフォルダーはグローバルクラスパスに自動的に取り込まれませんか?jre/lib/extNoClassDefFoundError

ありがとう

4

1 に答える 1

2

はい、クラスパスに自動的に取得されますが、RXTXcomm は JNI /native 外部ライブラリ (.so および .dll ファイル) を使用します。コマンド ラインでプログラムを実行するときに、それらへのパスを指定する必要があります。

java -jar yourprogram.jar -Djava.library.path="PATH_TO_EXTERNAL_LIBRARIES"

Linux の場合:

rxtx.zipを /home/user/ に解凍したとします。

32 ビット x86 プラットフォームを使用している場合:

PATH_TO_EXTERNAL_LIBRARIES = /home/user/Linux/i686-unknown-linux-gnu/

64 ビット x86 プラットフォームの場合は、次のようになります。

PATH_TO_EXTERNAL_LIBRARIES = /home/user/Linux/x86_64-unknown-linux-gnu/

Windows の場合:

ダウンロードして C:\rxtxt に解凍したとします。

PATH_TO_EXTERNAL_LIBRARIES = C:\rxtxt\Windows\i368-mingw32\

コマンドラインから実行するのが面倒な場合は、yout コードから実行できます ( RXTXcomm 経由でポートを開く前に)。

System.setProperty("java.library.path","PATH_TO_EXTERNAL_LIBRARIES");

編集:

もちろん、上記のすべてに加えて、クラスパスに RXTXcomm.jar を配置する必要があります。コマンド ラインから jar パッケージ プログラム (yourprogram.jar) として実行する場合は、jar 内に次のエントリを持つ MANIFEST.MF を含む META-INF フォルダーが必要です。

Class-Path: lib/RXTXcomm.jar
Main-Class: pkg.Main

yourprogram.jar は、RXTXcomm.jar であるフォルダ lib を持つフォルダにある必要があり、また、次のクラスがあります。

public static void main(String[] args)

メソッドは Main と呼ばれ、pkg という名前のパッケージに存在する必要があります (pkg.Main を任意のものに置き換えるだけです)。

その後、プログラムを正常に実行し、シリアル ポートがあればそれを開くことができます。このアプローチにより、jre/lib/ext フォルダー内のものをコピーする必要もなくなります。

編集^ 2:

または、プログラムを jar にパックしたくない場合は、フォルダー pkg を含むフォルダーに配置して、次のように記述します。

java -cp PATH_TO_RXTX/RXTXcomm.jar -Djava.library.path="PATH_TO_EXTERNAL_LIBRARIES" pkg.Main

(すべてのパスは相対パスまたは絶対パスにすることができます)

編集^ 3:

ただし、RXTXcomm の代わりにJava Simple Serial Connectorをお勧めします。

  • RXTXcomm (本番環境でテスト済み) とは対照的に、複数のスレッドからの重い負荷を処理します。
  • 外部ライブラリはjarにパックされているため、java.library.pathを設定する必要はありません
于 2012-10-09T21:29:59.837 に答える