OutputStream out = p.getOutputStream();
out.write(...);
我没有试过.但你不妨一试.

解决方案 »

  1.   

    helpall
    我试了一下,不行啊,现在程序的输出都捕捉不到
    比如说运行ping的时候,使用下面的语句
    br=new BufferedReader(new InputStreamReader(p.getInputStream()));
    就可以通过br捕捉到ping的输出,
    但是运行我的可执行程序util时,一到这里就停下了,不动了,没有输出,也没有报错,
    不知道是怎么回事
      

  2.   

    Process p1 = Runtime.getRuntime().exec(
                      new String[]{
                         "ping",
                         "www.yahoo.com"
                         });
                      InputStream is = p1.getInputStream();
                      int r;
                      while( (r=is.read()) != -1)
                            System.out.print((char)r);Pinging www.yahoo.akadns.net [64.58.76.228] with 32 bytes of data:Reply from 64.58.76.228: bytes=32 time=141ms TTL=241
    Reply from 64.58.76.228: bytes=32 time=130ms TTL=241
    Reply from 64.58.76.228: bytes=32 time=130ms TTL=241
    Reply from 64.58.76.228: bytes=32 time=140ms TTL=241Ping statistics for 64.58.76.228:
        Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
        Minimum = 130ms, Maximum =  141ms, Average =  135ms
      

  3.   


    谢谢helpall的回复
    我的程序里面只要把命令改为ping和相应的参数也可以输出你所说的结果,
    但是原样换成我的命令就不行了
    我把原程序贴出来吧
      String util = new String("...\\openssl.exe");
      String[] parameter = {"req","-new","-config", 
        "...\\openssl.cnf","-days","365",
        "-out","...\\test_csr.pem","-keyout",
        "...\\test_pk.pem"};
    ...
         try{
              Process p = Runtime.getRuntime().exec(util,parameter);     BufferedReader  br=new BufferedReader(new InputStreamReader    (p.getInputStream()));            /******* 程序单步跟踪的时候一到下面这句就停下来了 *******/
                System.out.println("br.readLine 结果是 "+ br.readLine());
        ........
    所谓停下来就是debug窗口的step按钮全部失效,显示正在调试,在输出窗口也没有什么变化。
    此时若强行停止程序,就会出现这样的输出
      br.readLine 结果是  openssl>
      .....
      result is        /** 这里的输出就都是空的了 ***/
      

  4.   

    终于想通了。
    exec(String cmd, String[] envp) 
    后面的参数是环境变量,不是参数,所以必须用
    exec(String[] cmdarray) 
    把参数和命令放到一个String[]里面,搂主,没错了。
      

  5.   

    谢谢advanced和zlyperson的回复!
    呵呵,advanced,exec(String[] cmdarray)的方法我试过,和上面的结果一样,
    到 br.readline就停下来了,两者不同的地方在于强行停止后,输出都是空的
    即:
        br.readLine 结果是 null
        .........
        the result is 
      

  6.   

    import   java.io.*;
    import   java.net.*;public  class  t{
    public static  void  main(String  args[])throws Exception{
    InputStreamReader    ir;
    BufferedReader     in;
    Process p1 = Runtime.getRuntime().exec(
                      new String[]{
                         "ping",
                         "www.yahoo.com"
                         });
                       InputStream  ou=p1.getInputStream();
                            ir=new    InputStreamReader(ou);
                            in=new    BufferedReader(ir);
                           String  r;
                      while( (r=in.readLine())!=null){
                           System.out.println(r);
                     }
           }
    }出来哪个我想调试别人的程序
      

  7.   

    谢谢wyqiang的回复
    我的程序没有完全贴完,但整体实现和你所贴的类似,运行后同样会在
    下面这句停下来
       while( (r=in.readLine())!=null){
                           System.out.println(r);
             .............
    似乎InputStream并不能获取命令的执行结果
      

  8.   

    尝试一下用OutputStream ops =p1.getOutputStream()输入参数吧。
      

  9.   

    谢谢大家的关注!
    OutputStream 的方法我试过,程序没有反应,不知道是不是输入格式有问题
    源程序是这样的   String util = new String("...\\openssl.exe");
      String[] parameter = {util,"req","-new","-config", 
        "...\\openssl.cnf","-days","365",
        "-out","...\\test_csr.pem","-keyout",
        "...\\test_pk.pem"};
      StringBuffer sb=new StringBuffer();
      String inline;
      String retu;
    ...
         try{
              Process p = Runtime.getRuntime().exec(parameter);                if(p == null)
                {
                    System.out.println("现在process仍旧为null");
                }
          BufferedReader         br=new BufferedReader(new InputStreamReader(p.getInputStream()));
         // OutputStream oStream = p.getOutputStream(); 
          
          if(br == null)
            System.out.println("br   is null");            while((inline=br.readLine())!=null)
          {
              sb.append(inline).append("\n");
              System.out.println("*************   中间inline 的 结果是"+sb.toString());
          }      retu=sb.toString();   //将命令结果返回
          System.out.println("结果是"+retu);
          sb = null;
          
          int m_int  = p.exitValue();
          System.out.println("process现在的状态是 : " + m_int);