如何从我的 Java 应用程序运行批处理文件?

2022-08-31 09:07:47

在我的Java应用程序中,我想运行一个批处理文件,该文件调用”scons -Q implicit-deps-changed build\file_load_type export\file_load_type"

似乎我甚至无法执行我的批处理文件。我没有想法。

这是我在Java中所拥有的:

Runtime.
   getRuntime().
   exec("build.bat", null, new File("."));

以前,我有一个我想运行的Python Sconscript文件,但由于它不起作用,我决定通过批处理文件调用脚本,但该方法尚未成功。


答案 1

批处理文件不是可执行文件。他们需要一个应用程序来运行它们(即cmd)。

在 UNIX 上,脚本文件在文件开头有 shebang (#!)来指定执行它的程序。在 Windows 中双击由 Windows 资源管理器执行。 对此一无所知。CreateProcess

Runtime.
   getRuntime().
   exec("cmd /c start \"\" build.bat");

注意:使用该命令,将打开一个单独的命令窗口,标题为空,并且批处理文件的任何输出都将显示在该窗口中。它还应该只与“cmd /c build.bat”一起使用,在这种情况下,如果需要,可以从Java中的子进程中读取输出。start \"\"


答案 2

有时线程执行进程时间高于JVM线程等待进程时间,它通常用于当您调用的进程需要一些时间才能处理时,请使用waitFor()命令,如下所示:

try{    
    Process p = Runtime.getRuntime().exec("file location here, don't forget using / instead of \\ to make it interoperable");
    p.waitFor();

}catch( IOException ex ){
    //Validate the case the file can't be accesed (not enought permissions)

}catch( InterruptedException ex ){
    //Validate the case the process is being stopped by some external situation     

}

这样,JVM 将停止,直到您调用的进程完成,然后它才能继续使用线程执行堆栈。


推荐