2009-07-31 15 views
7

ほとんどがGUIのJavaプログラムがあり、C++コマンドラインツールからXMLファイルに書き込まれたデータが表示されます。今私は、Javaプログラムにデータを更新するためのボタンを追加したいと思います。つまり、私のプログラムはC++の機能を呼び出さなければなりません。JavaからC++の機能を呼び出す方法

システムコールを使用してjavaからプログラムを呼び出す最良の方法はありますか? C++プログラムはMac OSとWindows用にコンパイルされ、常にJavaプログラムと同じディレクトリに置かなければなりません。

実行可能ファイルを生成したいのですが、Cプログラムをjarファイルの中に保存し、私のプログラムから呼び出すことができますか?

答えて

5

は(SOAP、ICE、ソケットなど)が利用可能である、私はRuntime.exec()を使用して実行可能ファイルを呼び出すと思います。 JNIは直接インターフェイスに使用できますが、私はそれをお勧めしません。実行可能ファイルをjarファイルに入れることはできません。シェルは実行方法を知らないので、実行することはできません。

+1

JNIの何が問題なのですか?それは理由があり、別のプロセスを開始するよりもはるかにパフォーマンスが優れています。 –

+0

JNIの問題は、間違いをした場合、JVMがクラッシュする可能性があることです。 "segfault:code dumped"のように。 –

+2

@Pavel:ポータブルではなく、安定性が低く、より堅いカップリング – Draemon

6

コードにアクセスして外部プログラムとの「対話的な」エクスペリエンスを望む場合(例:電話をかけたり、結果を得たり、追加の電話をかける)、JNIを調べて、CまたはC++コードを&をJNIジュースとあなたのCまたはC++アプリケーションをリンクさせることで、Javaアプリケーションを作成できます。

を参照してください:あなたは本当にただ "打ち上げアプリをして結果を得る" 必要なソリューションの並べ替えをした場合

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

http://www.rgagnon.com/javadetails/java-0014.html

2

最後の質問に答えるために、あなたのjarファイルから実行ファイルを実行することはできません。

あなたのjarファイルに保存し、実行前に一時ディレクトリ/ファイルに展開します(最初にその存在を確認し、必要に応じて抽出します)。これにより、配布するjarファイルのみが存在し、jarファイルのJavaコードと一致する実行ファイルが実行されていることが保証されます。

+0

私はこれに一度似たことをしました。うまくいきましたが、異なるプラットフォームで作業する必要がある場合は難しいかどうかはわかりません。 – sixtyfootersdude

関連する問題