研究了下Runtime.exec和Process发现,java调用外部程序时,是将其作为子进程进行管理里的,也就是说在执行了调用后,只有外部程序返回了,java才会执行后面的步骤;同时,如果java主程序退出,那么调用的那个程序也会自动退出!
我现在的目的是使用java调用后,不再与调用的那个程序发生关系,如何做到呢?   public static void command() {
      //String cmd = "cmd /c start *.exe";
      String cmd = "*.exe";
      System.out.println("正在执行命令:"+cmd);
      try {   
         Runtime rt = Runtime.getRuntime();   
         Process p = rt.exec(cmd);
         p.destroy();         BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(), "gbk"));   
         String line;   
         while ((line = br.readLine()) != null) {   
            System.out.println(line);   
         }            br = new BufferedReader(new InputStreamReader(p.getErrorStream(), "gbk"));   
         while ((line = br.readLine()) != null) {   
            System.err.println(line);   
         }            //int exitVal = p.waitFor(); 
         //System.out.println("执行完毕!返回值="+exitVal);
         System.out.println("执行完毕!返回值");      } catch (Exception e) {
         e.printStackTrace();
      } 
   }
看网上说可以用cmd /c start命令去执行外部exe程序,我测试了也不行,那位高手给支支招,谢谢了!

解决方案 »

  1.   

    如果java做不到,只能想别的办法了!
      

  2.   

    java中起一个线程去执行不就行了
      

  3.   

    子进程进行管理里的,也就是说在执行了调用后,只有外部程序返回了
    --
    这个是错误的说法,子进程不代表主进程必须等待子进程的,这个没有任何关系。
    只是你的代码因为要读取Process的返回流才会导致要等待子进程结束而已
    你应该在Java代码中new Thread()中的run方法调用上述代码,那么Java就不存在等待子进程的问题了
      

  4.   

    楼上的ticmy和ChDw:
      启用新的线程执行的话,如果java程序关闭了,会不会导致外部调用的程序也一同被关闭了?
      

  5.   

    这个真没试过不过如果不强行退出,在线程执行完之前,main方法是不会自动退出的
      

  6.   

    算了,放弃用java了,谢谢你!