-2

java から bash でプロセス/コマンドを実行するには、次のクラスを使用できます。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;

public class CmdExecutor {
    public CmdExecutor(){

    }
    public void exe(String [] args) throws IOException{
            if (args.length <= 0) {
                System.out.println("empty command");
                return;
            }

           Process process = new ProcessBuilder(args).start();
           InputStream is = process.getInputStream();
           InputStreamReader isr = new InputStreamReader(is);
           BufferedReader br = new BufferedReader(isr);

           String line;
           System.out.printf("Output of running %s is:", 
              Arrays.toString(args));

           while ((line = br.readLine()) != null) {
             System.out.println(line);
           }
    }
}

でも。プロセスが(まだ)終了しない場合はどうなりますか。計算を行い、シェルで出力します。プロセスを別のスレッドで実行し、フレームごとの文字列など、出力の変更を取得できるようにしたいと考えています。これはどのように達成できますか?

4

1 に答える 1

1

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingQueue.htmlを確認してください 。

1 つのスレッド (プロデューサー) でプロセス出力を読み取って LinkedBlockingQueue に入れ ( queue.put)、別のスレッド (コンシューマー) でキューから要素を取得し ( queue.poll)、それを処理したい場合があります。

于 2013-07-31T00:25:18.250 に答える