1

I'd like to start external third party application from my Java application. This external application should run all the time whilst my java application runs.

From time to time (it depends on user interaction) my java app should be able to read and write to this external application via stdin and stdout.

How can I do that?

4

4 に答える 4

2

基本的に、外部プロセスが終了するのを監視し、メインの Java アプリがそれにアクセスできるように、その入力/出力/エラー ストリームをシャッフルする Java の複数のスレッドが必要になります。

のようなクラスでそれを行うには、より「基本的な」方法がありますが、戻り値と I/O を処理するための便利なツールを提供するApache Commons-execProcessをお勧めします。

于 2011-06-13T20:31:14.327 に答える
1

を開始するという提案を実装しているので、 Runtime.exec()が実行しない場合のすべての推奨事項をProcess読んで実装します。

(1.5+をコーディングする場合)ProcessBuilderの代わりにを使用することも検討してください。Runtime.exec()

于 2011-06-13T20:32:05.730 に答える
0

それは、主に外部アプリケーションの詳細に依存します: サードパーティですか、それともあなたが制御できるものですか? ...それが構築されているもの、その機能は何かなど.

'kludgy' 方法は、単純にファイル システムを使用し、特定の場所にドロップされたファイルを Java に監視させることです (ロックされたファイルを適切に処理するように注意してください)。より洗練された方法は、ソケットを介して通信するか、hsqldb などのローカル/内部でホストされているデータベース内のデータベース テーブルに書き込むことです。もちろん、サードパーティのアプリによっては、java.lang.Process 経由でイン/アウト ストリームを使用することもできます。

ただし、これもすべて、通信しているアプリケーションの仕様によって異なります。サードパーティのアプリが Excel の場合、Java の Process クラスは役に立ちません (その場合、最初に述べた方法で xls ファイルの保存ディレクトリを監視する必要があるでしょう)。

于 2011-06-13T21:12:40.653 に答える
0

元アプリのネイティブ コードですか、それとも別の Java プログラムですか? ネイティブ コードの場合は、http ://download.oracle.com/javase/1.5.0/docs/api/java/lang/Process.htmlおよびhttp://download.oracle.com/javase/1.5.0を参照してください。 /docs/api/java/lang/Runtime.html

これらを使用すると、ネイティブ プログラムを実行し、そのステータスを追跡し、出力を取得して入力を送信できます。

于 2011-06-13T20:09:58.237 に答える