Javaでシリアル通信するためにRXTXライブラリを使ってCOMポートを開いた
あらまし
先日こんなことがあった
解決したので報告
まず本プロジェクトの環境周りを
プログラムはほぼ触らずに新しいパソコンへ移植というお仕事
- Windows 7 32bit -> Windows Server 2016 64bit
- Java6 -> Java8
- シリアル通信で外部機械との通信あり、シリアル通信には
RXTX-2.1-7
というライブラリを使っている
次に起きた問題
// RS232Cポートをオープンする。この処理を実行すると
CommPortIdentifier RSport = CommPortIdentifier.getPortIdentifier("COM1");
// このエラーになる。( rxtxParallel.dll と rxtxSerial.dll を見つけられませんだって )
> java.lang.NoClassDefFoundError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
// Javaが64bitだとこのエラーになる。( 呼び出した.dllが32bit版だから動かせないよだって)
> java.lang.UnsatisfiedLinkError: C:\Windows\System32\rxtxSerial.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform thrown while loading gnu.io.RXTXCommDriver
やったこと
- Javaの再インストール(64bit版をアンインストールして32bit版をインストールした)
Javaだから環境依存しないでしょ?と何も考えずに64bit版のJavaを入れたのも失敗
上にも書いたけどDLLが32bit版の場合は32bit版のJavaからでないと呼び出せない
ちなみに64bit版ライブラリもあるようだ。こちらだったら64bit版Javaでいいかもしれない。(が今回は32bitで押し通す)
-
C:\Windows\SysWOW64
にrxtxParallel.dll
とrxtxSerial.dll
を配置
以前は32bitOSだからsytem32でよかったけど64bitOSで32bitのライブラリを使うならここに入れる。
なぜならWindowsがリダイレクトするので。
-
RXTXcomm.jar
のパスをきっちりクラスパスに設定する
試しに書いたサンプルコードを以下に記す
メモ帳で即席で書いたため汚いのはご愛敬で
@echo off
@cd %~dp0
set JAVA_CLASSPATH=%任意のフォルダ%\RXTXcomm.jar
rem =========
rem コンパイル
rem =========
javac -cp "%JAVA_CLASSPATH%" Test.java
@if %errorlevel% equ 0 (cls) else (pause)
rem =========
rem java実行
rem =========
java -cp "%JAVA_CLASSPATH%" Test
pause
import gnu.io.CommPortIdentifier;
class Test{
public static void main(String[] arg){
showJavaLibrary();
try{
// RS232Cポートをオープンする。
CommPortIdentifier RSport = CommPortIdentifier.getPortIdentifier("COM3");
}catch(Exception e){
System.out.println(e.toString());
}
}
public static void showJavaLibrary(){
System.out.println("パス出力ここから=================");
for (String str : System.getProperty("java.library.path").split(";")){
System.out.println(str);
}
System.out.println("パス出力ここまで=================");
}
}
さて実環境を直してきますか
Author And Source
この問題について(Javaでシリアル通信するためにRXTXライブラリを使ってCOMポートを開いた), 我々は、より多くの情報をここで見つけました https://qiita.com/Rmecan/items/94f4ddccf20ebb465e43著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .