下面这段程序调用PING命令后PING命令不自动结束。怎样能让PING命令执行完自动结束呢。PING不结束得不到返回值。是不是jdk版本的问题 ?
代码如下:
package pda.cmd;
import java.io.PrintWriter;
import java.io.PrintStream;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Date;
import java.io.StringReader;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.File;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
public class useping {
  private boolean isRunning=true;
  public useping() {
  }
  public void run(){
  }
  public static void main(String[] args){
    try {
             System.out.println("ping 127.0.0.1");
 Process proc=Runtime.getRuntime().exec("cmd /c ping 127.0.0.1");
  System.out.println("ping finished");
        try {
         System.out.println("wait for exit");
            proc.waitFor();
         System.out.println("exited");
        } catch (InterruptedException e) {
        }
        
        int val = proc.exitValue();
        System.out.println("exitvalue is : "+val);
    }
    catch (IOException ex) {
      ex.printStackTrace();
    }
  }
}

解决方案 »

  1.   

    不要使用waitFor,你去proc.getInputStream(),然后
    int ch = -1;
    while((ch = is.read()) >= 0);
      

  2.   

    我改成这样还不行哦 帮帮我哦package pda.cmd;
    import java.io.PrintWriter;
    import java.io.PrintStream;
    import java.io.IOException;
    import java.sql.SQLException;
    import java.util.Date;
    import java.io.StringReader;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.Reader;
    import java.io.File;
    import java.io.BufferedWriter;
    import java.io.OutputStreamWriter;
    public class useping {
      private boolean isRunning=true;
      public useping() {
      }
      public void run(){
      }
      public static void main(String[] args){
        try {
                 System.out.println("ping 127.0.0.1");
     Process proc=Runtime.getRuntime().exec("cmd /c ping 127.0.0.1");
      System.out.println("ping finished");
            try {
             System.out.println("wait for exit");
          BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
          String instr = in.readLine();
          while(!"exit".equals(instr)){
            instr = in.readLine();
            System.out.println(instr);
          }
             System.out.println("exited");
            } catch (InterruptedException e) {
            }
            
            int val = proc.exitValue();
            System.out.println("exitvalue is : "+val);
        }
        catch (IOException ex) {
          ex.printStackTrace();
        }
      }
    }
      

  3.   

    你弄错我的意思,你是读取proc.getInputStream() public static void main(String[] args) throws Exception {
    Process proc = Runtime.getRuntime().exec("cmd /c ping 127.0.0.1");
    System.out.println("ping finished");
    InputStream is = proc.getInputStream();
    int ch = -1;
    while((ch = is.read()) >= 0);
    System.out.println(proc.exitValue());
    }
      

  4.   

    看不懂,不过在window 和 linux 的 Ping 是不一样的,像 linux 下的ping 是永远 ping 下去的,但在 window 是要加 -t 的参数,是不是这个令你得不到结束啊,你最后加个Ping 的次数,命令我忘记了,好像是 -c 10 这样的