【问题标题】:capture error from runtime process java从运行时进程java捕获错误
【发布时间】:2012-08-03 11:48:28
【问题描述】:

我正在使用 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);
  }
}

我想处理进程p2InputOutputError流。 我确实捕获了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 的错误。

您能否给我一个示例代码来解决此问题并处理输出流或分享想法?在此先感谢

【问题讨论】:

  • 还可以考虑使用ProcessBuilder,它提供了一种合并outerr 流的方法,因此它们更易于使用。

标签: java process runtime.exec


【解决方案1】:

我一直使用的解决方案是创建一个单独的线程来读取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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 2013-09-01
    相关资源
    最近更新 更多