フォルダーに入れrxtxcomm.jar
ましたが、まだこのフォルダーはグローバルクラスパスに自動的に取り込まれませんか?jre/lib/ext
NoClassDefFoundError
ありがとう
はい、クラスパスに自動的に取得されますが、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をお勧めします。