Runtime.getRuntime().exec问题

来源:互联网 发布:域名备案地点查询 编辑:程序博客网 时间:2024/05/04 01:10

调用Runtime.getRuntime().exec方法可能出现死锁情况,程序处于无响应状态,这是因为Runtime.getRuntime().exec方法需要自己处理stderr 及stdout流,而解决方法即是将它们导出用别的thread处理。

Process p = Runtime.getRuntime().exec(cmd);StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), "ERROR");                            // kick off stderr        errorGobbler.start();                StreamGobbler outGobbler = new StreamGobbler(p.getInputStream(), "STDOUT");        // kick off stdout        outGobbler.start(); p.waitFor();


 

 

package com.sdc.callmaxent.socket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import com.sdc.callmaxent.util.FileUtil;/** * 用于处理Runtime.getRuntime().exec产生的错误流及输出流 * @author shaojing * */public class StreamGobbler extends Thread {InputStream is;String type;OutputStream os;    StreamGobbler(InputStream is, String type) {this(is, type, null);}    StreamGobbler(InputStream is, String type, OutputStream redirect) {        this.is = is;        this.type = type;        this.os = redirect;    }        public void run() {        InputStreamReader isr = null;        BufferedReader br = null;        PrintWriter pw = null;        try {            if (os != null)                pw = new PrintWriter(os);                            isr = new InputStreamReader(is);            br = new BufferedReader(isr);            String line=null;            while ( (line = br.readLine()) != null) {                if (pw != null)                    pw.println(line);                System.out.println(type + ">" + line);                }                        if (pw != null)                pw.flush();        } catch (IOException ioe) {            ioe.printStackTrace();          } finally{        FileUtil.close(pw);        FileUtil.close(br);        FileUtil.close(isr);        }    }} 


转载地址:http://blog.csdn.net/dysj4099/article/details/5985596

相关资料:http://saluya.iteye.com/blog/1260347 
http://lavasoft.blog.51cto.com/62575/15599/

 

0 0
原创粉丝点击