3

実行中のアプリケーションの存続期間中、バックグラウンドでプロセスを実行する必要がある Java アプリケーションを作成しています。

ここに私が持っているものがあります:

Runtime.getRuntime().exec("..(this works ok)..");
Process p = Runtime.getRuntime().exec("..(this works ok)..");
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

だから、基本的に私はすべてを印刷しますbr.readLine()

私が確信していないのは、このコードをアプリケーションに実装する方法です。これは、(Runnable を使用して)どこに配置しても、他のコードの実行がブロックされるためです (予想どおり)。

Runnable、Thread、SwingUtilities を使用しましたが、何も機能しません...

どんな助けでも大歓迎です:)

4

1 に答える 1

2

br.readLine()スレッド内の入力ストリーム(つまり)を読み取ることができます。そうすれば、常にバックグラウンドで実行されます。

これをアプリケーションに実装する方法は、おおまかに次のようになります。

ビジネスロジック、つまりスクリプトを呼び出す場所:

// Did something...

InvokeScript.execute("sh blah.sh"); // Invoke the background process here. The arguments are taken in processed and executed.

// Continue doing what you were doing

InvokeScript.execute()は次のようになります。

InvokeScript.execute(String args) {
// Process args, convert them to command array or whatever is comfortable

Process p = Runtime.getRuntime().exec(cmdArray);

ReaderThread rt = new ReaderThread(p.getInputStream());
rt.start();
}

ReaderThreadは、開始したプロセスの出力が続く限り、その出力を読み取り続ける必要があります。

上記は疑似コードにすぎないことに注意してください。

于 2010-09-14T16:55:33.037 に答える