JavaからC++機能を呼び出す方法
-
06-07-2019 - |
質問
私は主に GUI である Java プログラムを持っており、C++ コマンド ライン ツールから XML ファイルに書き込まれたデータを表示します。ここで、データを更新するためのボタンを Java プログラムに追加したいと思います。これは、プログラムが C++ 機能を呼び出す必要があることを意味します。
システムコールを通じてJavaからプログラムを呼び出すだけの最良の方法ですか?C++ プログラムは Mac OS および Windows 用にコンパイルされ、常に Java プログラムと同じディレクトリに存在する必要があります。
実行可能ファイルを生成したいのですが、C プログラムを jar 内に保存してプログラムから呼び出すことはできますか?
解決
これより良い通信方法 (SOAP、ICE、ソケットなど) が利用できないと仮定すると、次を使用して実行可能ファイルを呼び出します。 Runtime.exec()
. 。JNI を使用して直接接続することもできますが、お勧めしません。いいえ、jar に実行可能ファイルを入れることはできません。できますが、シェルは実行方法を知らないため、実行できません。
他のヒント
コードにアクセスでき、外部プログラムとの「インタラクティブな」体験が必要な場合(たとえば、呼び出し、結果の取得、追加の呼び出し)、JNIを調査します。これにより、JavaからCまたはC ++コードを呼び出すことができます。 &を含むアプリケーションを使用してJNIジュースをCまたはC ++アプリにリンクします。
参照:
http://en.wikipedia.org/wiki/Java_Native_Interface
http://www.acm.org/crossroads/xrds4-2/ jni.html
「アプリを起動して結果を取得する」だけが本当に必要な場合一種の解決策として、Runtime.exec()をチェックしてください。これにより、外部プログラムを起動できます&出力をキャプチャします。
参照: http://www.javaworld.com /javaworld/jw-12-2000/jw-1229-traps.html?page=1
Java Native Access API(JNA)もご覧ください。 p>
最後の質問に答えるために、jar内から実行可能ファイルを実行することはできません。
ただし、実行する前にjar内に 保存して一時ディレクトリ/ファイルに抽出できます(最初に存在を確認し、必要に応じて抽出します)。これにより、配布するjarのみがあり、jarされたJavaコードと一致する実行可能ファイルを実行しているという点で、配布が多少簡単になります。