
我想问题是您只在读取InputStream而没有在读取ErrorStream。您还必须注意并行读取两个流。可能发生这种情况,当前从输出流中管道传输的数据已填满OS缓冲区,您的exec命令将自动挂起,以使您的阅读器有机会清空缓冲区。但是程序仍将等待输出处理。因此,发生挂起。
您可以创建一个单独的类来处理输入流和错误流,如下所示,
public class ReadStream implements Runnable { String name; InputStream is; Thread thread; public ReadStream(String name, InputStream is) { this.name = name; this.is = is; }public void start () { thread = new Thread (this); thread.start (); }public void run () { try { InputStreamReader isr = new InputStreamReader (is); BufferedReader br = new BufferedReader (isr); while (true) { String s = br.readLine (); if (s == null) break; System.out.println ("[" + name + "] " + s); } is.close (); } catch (Exception ex) { System.out.println ("Problem reading stream " + name + "... :" + ex); ex.printStackTrace (); } }}使用方式如下:
String cmd= "cmd /C si viewhistory --fields=revision --project="+fileName; Process p = Runtime.getRuntime().exec(cmd) ; s1 = new ReadStream("stdin", p.getInputStream ());s2 = new ReadStream("stderr", p.getErrorStream ());s1.start ();s2.start ();p.waitFor(); } catch (Exception e) { e.printStackTrace(); } finally { if(p != null) p.destroy();}欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)