おはようございます、
USB からシリアルへの通信を介して POS プリンターと通信する Java プログラム、orderPrinter があります。指示に従ってRXTXおよびjavax.commライブラリをインストールし、ファイルの場所をいじった後、私のマシン(Windows 7)でプログラムを実行することに成功しました。
ただし、Windows XP で動作させるのに苦労しています (配布後、Windows XP はプライマリ プラットフォームになり、セカンダリは Linux になると思います)。64 ビットの JAR ファイルと DLL ファイルをそれぞれの 32 ビットの代替ファイル ( RXTX wikiにあるように) に置き換えた後、いくつかの問題に遭遇しました。
1) RXTX が正しい COM ポートを見つけるのに問題があるようです。echo [意味不明] >> COMx でテストすると応答が生成されるので、プリンターが COM5 にあることがわかります。次のコード:
Enumeration portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
System.out.println("Port: "+((CommPortIdentifier)(portList.nextElement())).getName());
}
CommPortIdentifier portID = CommPortIdentifier.getPortIdentifier(settings.port);
32ビットマシンの唯一のポートとして「ポート://./COM5」を出力しますが、Windows 7では「ポート:COM5」が返されます。私が遭遇する最初の問題は、CommPortIdentifier.getPortIdentifier(port) の呼び出しが XP で失敗することです。これは、ポート名と正確に一致する CommPortIdentifier が原因であるとしか想像できません。JAR を変更して、より寛大なポート マッチングを可能にする方法はありますか?
2) 今のところ、一時的な修正として、Windows XP で予想される正確な文字列をハードコーディングしたとします。その直後に portID.open([correct parameters) を呼び出すと、プログラムは次のエラーでクラッシュします。
Exception in thread "main" java.lang.VerifyError: (class: gnu/io/RXTXPort$SerialOutputStream, methd: flush signature: ()V) Illegal use of nonvirtual function call
私が見つけたすべてのソリューションは、古いバージョンの RXTX を使用することに要約されています。ただし、前述のとおり、私は 2.1-7r2 を使用しています。これは、私の知る限り、最新の安定版リリースです。このエラーとその修正方法に完全に困惑しています。何か案は?
私はJavaプログラミングに精通していますが、ビルド関連のエラーについての理解ははるかに限られていることに注意してください。また、今後この問題をより簡単に解決できるように、問題を説明できるようにしたいと思います。
お時間をいただきありがとうございます。
編集: 問題 1 の解決策があると思います。ソースを変更してから再コンパイルします。ただし、プロンプトでjavacが有効なコマンドではない理由をデバッグする時間は実際にはありません。また、Eclipseでこれを行う信頼できる方法も見つけていません。繰り返しますが、JAR をインポートする以外のことをするのはこれが初めてなので、控えめに言っても学習経験です。または、この時点で火の試練。