2008-01-10
java中用Process执行外部命令挂起问题的解决办法
关键字: java process runtime.exec waitfor hang
我要在Java中调一个外部命令,于是写了以下代码
当执行的外部命令没有任何输出的时候,这段代码运行正常,但如果执行的外部命令有输出的时候,这段程序就会挂起,估计是因为流没有被读取导致了堵塞,于是把代码改为
一切正常。
Process p = Runtime.getRuntime().exec("my command ...");
int c = p.waitFor();
if (c != 0)
{
System.out.prinln("处理失败");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
for (String line = br.readLine(); line != null; line = br.readLine())
{
System.out.println(line);
}
}
当执行的外部命令没有任何输出的时候,这段代码运行正常,但如果执行的外部命令有输出的时候,这段程序就会挂起,估计是因为流没有被读取导致了堵塞,于是把代码改为
public void test() throws IOException, InterruptedException
{
Process p = Runtime.getRuntime().exec("command...");
String errorMsg = readInputStream(p.getErrorStream());
String outputMsg = readInputStream(p.getInputStream());
int c = p.waitFor();
if (c != 0)
{
System.out.println("处理失败:" + errorMsg);
}else
{//print command output
System.out.println(outputMsg);
}
}
private String readInputStream(InputStream is) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuffer lines = new StringBuffer();
for (String line = br.readLine(); line != null; line = br.readLine())
{
lines.append(line);
}
return lines.toString();
}
一切正常。
发表评论
- 浏览: 5880 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
基于Asp.net mvc preview ...
看了一下,感觉还很好用,准备裁剪后引入验证。辛苦,谢谢。
-- by lzy.je -
在GAE中生成全局序列号
并发没问题吗?
-- by zjumty -
程序员笑话
buaawhl 写道林杰杰 写道估计是把Dec看成了decimal吧。 不过这 ...
-- by sam.ds.chen -
程序员笑话
林杰杰 写道估计是把Dec看成了decimal吧。 不过这个没看懂: How ...
-- by buaawhl -
程序员笑话
keshin 写道几乎所有的硬盘厂商和散存厂商都是按1k=1000算的…… It ...
-- by 林杰杰






评论排行榜