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
- Runtime.getRuntime().exec问题
- Runtime.getRuntime().exec(command)的阻塞问题
- Runtime.getRuntime().exec()进程阻塞问题
- Runtime.getRuntime().exec()进程阻塞问题
- Runtime.getRuntime().exec() 输出流阻塞问题
- Runtime.getRuntime(). exec( )
- java Runtime.getRuntime().exec
- Runtime.getRuntime().exec
- Runtime.getRuntime().exec()
- Runtime.getRuntime().exec()
- java Runtime.getRuntime().exec()
- Runtime.getRuntime.exec 注意事项
- Runtime.getRuntime().exec()
- Runtime.getRuntime().exec
- Runtime.getRuntime().exec(...)使用方法
- 通信-Runtime.getRuntime().exec
- Runtime.getRuntime().exec(strMakePathPath);
- Runtime.getRuntime().exec方法
- LINQ之路 2:C# 3.0的语言功能(上)
- USACO Section 1.4 Mother's Milk
- 算法研究之字符串包含
- operator->重载问题总结(转)
- HDU 2871 Memory Control(线段树)
- Runtime.getRuntime().exec问题
- java运行环境安装
- 算法研究之左旋字符串
- UVa 10340 - All in All
- 通过反射的方式解析R文件
- linux文件内容查找与vim工具的使用
- 《VC++深入详解》第一章练习
- Android动画机制全解析
- js 读取本地时间