2

私はRuntime.getRuntime().execこのように使用して別のJavaアプリケーションからJavaプログラムを実行しています

Process p1 = Runtime.getRuntime().exec("javac test.java");
Process p2 = Runtime.getRuntime().exec("java test");

test.javaの内容

import java.io.*;
class test
{
 public static void main(String args[])
  {
  Scanner sc = new Scanner(System.in);
  String s = sc.nextLine();
  System.out.println(s);
  }
}

プロセスの入力出力エラーストリームを処理したいp2。の出力をキャプチャしましたが、test.java出力とエラーの処理方法がわかりません。

これが私のコードです:

try {
    String s = "";
    InputStream istr = p2.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(istr));
    BufferedReader bre = new BufferedReader
        (new InputStreamReader(p2.getErrorStream()));

    while ((s = br.readLine()) != null) {
        System.out.println(s);
    }
    br.close();
    while ((s = bre.readLine()) != null) {
        System.out.println(s);
    }
    bre.close();
    p2.waitFor();
} catch (IOException ex) {
    ex.printStackTrace();
} catch (Exception err) {
    err.printStackTrace();
}

上記のコードは、の出力をキャプチャするために正常に機能しますtest.javaただし、 test.javaのエラーは表示されません。

この問題を修正し、出力ストリームを処理したり、アイデアを共有したりするためのサンプルコードを教えてください。前もって感謝します

4

1 に答える 1

4

私がいつも使用してきた解決策は、別のスレッドを作成して、streams

だから、あなたの場合、それは次のようなものでなければなりません

String s = "";
InputStream istr = p2.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(istr));
BufferedReader bre = new BufferedReader
        (new InputStreamReader(p2.getErrorStream()));


new Thread(new Runnable() {    
    @Override
    public void run() {
       while ((s = br.readLine()) != null) {
             System.out.println(s);
        }
     }
 }).start();

 new Thread(new Runnable() {    
    @Override
    public void run() {
         while ((s = bre.readLine()) != null) {
              System.out.println(s);
          }
     }
  }).start();
// when you are finished close streams
于 2012-08-03T12:02:47.780 に答える