`

java中用Process执行外部命令挂起问题的解决办法

    博客分类:
  • JAVA
阅读更多
我要在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();
    }

一切正常。
分享到:
评论
1 楼 xiaoqing20 2010-01-22  
不错 不错 有意思

相关推荐

    JAVA中用到的DOS命令

    对于Java开发者来说,了解和熟练使用DOS命令可以提高开发效率和解决问题的能力。 首先,DOS的特点体现在其简单的用户交互方式。启动DOS后,用户会看到一个命令提示符,形如"C:\>",在这里,你可以输入命令来操控...

    在JAVA中用递归的方法解决汉诺塔问题

    ### 汉诺塔问题及其Java递归解决方案 #### 一、汉诺塔问题概述 汉诺塔(Tower of Hanoi)是一个源自古印度的古老传说中的数学益智游戏,通常用于教授递归算法的概念。游戏包含三个杆(通常标记为A、B、C)以及若干...

    Java调用应用程序和Dos中的命令

    `Runtime.exec()`是Java中用来执行外部命令的重要方法之一,它有多种重载形式,其中最常见的两种形式如下: 1. **基本形式**:`Process p = Runtime.getRuntime().exec(command);` - `command`:一个包含要执行的...

    JAVA中用到的json包

    在Java编程语言以及基于J2EE的企业级应用开发中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式。它易于人阅读和编写,同时也容易让机器解析和生成。JSON包在Java中扮演着至关重要的角色,...

    java中用数组为一个类定义多个对象

    下面我们将详细探讨如何在Java中用数组为一个类定义多个对象,并进行实例化。 首先,让我们创建`Person`类。这个类可能包含一些属性,如姓名、年龄等,以及与这些属性相关的操作方法: ```java public class ...

    db2中用java方法

    db2中用java方法来加解密数据入库;

    Java中用Calendar类计算周和周的起始日期

    在 Java 中用 Calendar 类计算周和周的起始日期需要了解 Calendar 类的使用方法和日期计算的逻辑,包括 setFirstDayOfWeek() 方法、getWeekOfYear() 方法、getFirstDayOfWeek() 方法和 getLastDayOfWeek() 方法等。...

    java中用URLConnection_类post方式提交表单

    java中用URLConnection类post方式提交表单 java中用URLConnection类post方式提交表单是指在java应用程序中使用java.net.URLConnection类来实现POST方式的表单提交。POST方式是HTTP协议中的一种常见的请求方法,它...

    Java中的时间操作,都是工作中用的着的

    本文将详细介绍Java中处理时间的常见方法,分为四个主要部分:获取当前时间、格式化时间、设置时间以及定时任务。 一、获取当前时间 Java提供了多种获取当前时间的方式。最常用的是通过`java.util.Date`类的构造...

    在domino中用JAVA的文档

    1. **官方文档**:IBM提供详细的Lotus Domino Java API文档,是学习和解决问题的重要参考。 2. **开发工具**:Domino Designer内置了Java开发环境,方便编写、调试和测试代码。 3. **社区与论坛**:参与Lotus ...

    解析C#中用Process类杀死进程,执行命令的深入分析

    本文将深入探讨如何使用`Process`类来杀死进程以及执行命令,同时也会介绍如何获取进程的相关信息。 首先,让我们关注如何根据进程名获取进程的用户名。在C#中,这涉及到对`System.Management`命名空间的使用,它...

    java 论坛 项目中用过

    %>`(声明变量或方法)、`<% %>`(执行Java代码)。 4. **JSP动作**:如`<jsp:useBean>`, `<jsp:setProperty>`, `<jsp:getProperty>`等,用于管理Java Bean对象。 5. **EL(Expression Language)**:用于简化...

    在JAVA中用递归解决的问题解析.pdf

    递归就是循环,只不过要有条件变量作为...通常需要把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。

    java中用的各种类

    它实现了JDBC接口,使得Java程序能够执行SQL查询和事务管理。 10. **搜索引擎**: 在Java中实现搜索引擎可能涉及Lucene、Solr或Elasticsearch等开源库。这些库提供索引、搜索、分析和高亮显示等功能,帮助构建强大...

    Java中用Applet画sinx

    在Java编程语言中,Applet是一种特殊的Java程序,它可以在Web浏览器中运行,为用户提供交互式的体验。在本示例中,我们将探讨如何利用Applet来绘制正弦函数sin(x)的图形。这个过程涉及到Java图形处理、数学计算以及...

    java中用FileUtil实现文件读写.pdf

    java中用FileUtil实现文件读写.pdf

    C#执行系统命令的方法

    本文介绍了C#执行系统命令的方法,分享给大家,... 您可能感兴趣的文章:C#执行外部命令的方法C#执行DOS命令的方法C#动态执行批处理命令的方法c#执行外部命令示例分享解析C#中用Process类杀死进程,执行命令的深入分析

    java中用dom解析xml的经典入门级文档

    java中用dom解析xml的经典入门级文档

Global site tag (gtag.js) - Google Analytics