从Java运行exe和" destroy"流程

时间:2015-08-03 17:20:21

标签: java batch-file process processbuilder

我需要从我的java应用程序运行exe。所以我写了一个.bat文件,我从我的java应用程序调用它。 批处理文件运行exe。

这是:

     String command = "C:\\Users\\XXXX\\Desktop\\DenemeBat\\hadi.bat";
     ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", command);
     pb.redirectErrorStream(true);
     Process p = pb.start();

    InputStream is = p.getInputStream();
   InputStreamReader isr = new InputStreamReader(is);
   BufferedReader br = new BufferedReader(isr);
   String line;

   while ((line = br.readLine()) != null) {
     System.out.println(line);
   }

   int excode=p.waitFor();

但是可以有不同的方法从java调用exe。例如。

案例:1

     String command = "C:\\Users\\XXXX\\Desktop\\DenemeBat\\hadi.bat";
     ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", command);
     pb.redirectErrorStream(true);
     Process p = pb.start();

案例:2 这里没有cmd。直接链接到.bat文件。

     String command = "C:\\Users\\XXXX\\Desktop\\DenemeBat\\hadi.bat";
     ProcessBuilder pb = new ProcessBuilder(command);
     pb.redirectErrorStream(true);
     Process p = pb.start();

案例:3 这里没有.bat文件和cmd.Directly运行exe。

     String command = "C:\\Users\\XXXX\\Desktop\\DenemeBat\\tryabc.exe";
     ProcessBuilder pb = new ProcessBuilder(command);
     pb.redirectErrorStream(true);
     Process p = pb.start();

那么哪种方式更好。我真正的问题是有必要破坏这个过程。

我使用waitfor方法,如果代码运行良好,则返回0.

问题1:杀死进程的正确方法是什么?

问题2:是否有必要杀死进程。如果我不杀死会发生什么?

问题3:如果我使用.bat文件需要我杀死进程吗?

问题4:如果我不使用.bat,cmd并直接运行exe,是否有必要终止进程?

最后,waitfor和destroy方法有什么区别?waitfor方法是否也会破坏进程?

1 个答案:

答案 0 :(得分:1)

在您的情况下,最好的解决方案是使用带有.exe路径的ProcessBuilder作为命令来简单地调用您的可执行文件。

关于您的问题(根据java 7 doc):

    正如名称本身所解释的那样,
  1. destroy杀死了这个过程。
  2. 在这种情况下,不需要它。程序结束后,它会自动销毁。但这样做并不坏(与扫描仪和输入流等相同)。
  3. 同样,这没有必要,但这是一个很好的做法,但最好直接调用.exe。
  4. 同样。
  5. WaitFor和Destroy之间的区别: WaitFor基本上使执行程序的线程等到它完成,而destroy完成该过程。

相关问题