我自己写了个me.bat,命令如下
echo hello every body
pause
然后写了类,main方法如下:public static void main(String args[]){
String bat = "E:\\Project\\TrunkJava\\me.bat";
Process p;
try {
      p = Runtime.getRuntime().exec(bat);
      InputStream in = p.getInputStream();
      int c;
      while ((c = in.read()) != -1)
      {
       System.out.print(c);
      }
      in.close();
      try {
       p.waitFor();
      } catch (InterruptedException e) {
e.printStackTrace();
}
} catch (Exception e) {
      System.out.println(e.getMessage());
}
System.out.println("Done");
}
我的环境是eclipse和XP,我所期望的是,一个dos窗口跳出来现实hello……,等我按任意键后,dos窗口消失,继续执行java代码在eclipse的输出窗口显示done,我不知道我写的代码对不对,执行后eclipse输出一些数字,且永远都不停止,没有dos窗口和done的输出,请教下原因!

解决方案 »

  1.   

    你把Batch文件拖到CMD中,能够正常运行吗?
      

  2.   

    可以正常运行.我试过了..String[] str= {"cmd.exe",bat};  你这样写看行不行..
      

  3.   

    不行,出现CreateProcess: "cmd.exe \c" E:\Project\TrunkJava\me.bat error=2,但是我找到一个答案,可以这样:
    public static void main(String args[]){
    String bat = "E:\\Project\\TrunkJava\\me.bat";
    Process p;
    try {
          p = Runtime.getRuntime().exec("cmd.exe /c "+ "start /min E:\\Project\\TrunkJava\\me.bat");
          InputStream in = p.getInputStream();
          int c;
          while ((c = in.read()) != -1)
          {
           System.out.print(c);
          }
          in.close();
          try {
           p.waitFor();
          } catch (InterruptedException e) {
    e.printStackTrace();
    }
    } catch (Exception e) {
          System.out.println(e.getMessage());
    }
    System.out.println("Done");
    }
    这样就能运行,但是我还是想知道为什么?
      

  4.   

    这个执行分为 直接执行 和 被解释执行.   bat文件属于第二种.. 所以要加上cmd.exe   如果是直接可执行的 .   就直接执行就好了.
       要先执行cmd.exe  然后执行 你的bat .  我上面的答案就是这个思路.. 但是我那个方法好像不行..这个行了就好了. 
      

  5.   

    能解释下什么是直接执行和解释执行吗,我的意思是exe是直接执行的吗,也就是不用加cmd.exe和start哪些前缀直接写文件名就好,而bat需要经过java分析后系统调用,所以用cmd.exe,可以这样理解吗,我不太懂……