从Java执行另一个应用程序

use*_*194 17 java processbuilder

我需要执行一个执行另一个Java应用程序的批处理文件.我不关心它是否成功执行,我不必捕获任何错误.

是否可以使用ProcessBuilder执行此操作?如果我不捕获错误会有什么后果?

但是,我的要求只是执行另一个Java应用程序.

Jos*_*iaz 29

这种Runtime.getRuntime().exec()方法很麻烦,你很快就会发现.

看看Apache Commons Exec项目.它抽象了许多与使用Runtime.getRuntime().exec()ProcessBuilderAPI 相关的常见问题.

它很简单:

String line = "myCommand.exe";
CommandLine commandLine = CommandLine.parse(line);
DefaultExecutor executor = new DefaultExecutor();
executor.setExitValue(1);
int exitValue = executor.execute(commandLine);
Run Code Online (Sandbox Code Playgroud)


YoK*_*YoK 25

是的,可以使用ProcessBuilder.

ProcessBuilder示例:

import java.io.*;
import java.util.*;

public class CmdProcessBuilder {
  public static void main(String args[]) 
     throws InterruptedException,IOException 
  {
    List<String> command = new ArrayList<String>();
    command.add(args[0]);


    ProcessBuilder builder = new ProcessBuilder(command);
    Map<String, String> environ = builder.environment();

    final Process process = builder.start();
    InputStream is = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String line;
    while ((line = br.readLine()) != null) {
      System.out.println(line);
    }
    System.out.println("Program terminated!");
  }
}
Run Code Online (Sandbox Code Playgroud)

检查以下示例:

http://www.rgagnon.com/javadetails/java-0014.html

http://www.java-tips.org/java-se-tips/java.util/from-runtime.exec-to-processbuilder.html


Dub*_*bas 5

您可以执行批处理指令,或使用任何其他应用程序

Runtime.getRuntime().exec(cmd);
Run Code Online (Sandbox Code Playgroud)
  • cmd 是命令或应用程序路径。

您也可以使用以下代码等待执行并获取返回代码(以检查其是否正确执行):

  Process p = Runtime.getRuntime().exec(cmd);
  p.waitFor();
  int exitVal = p.exitValue();
Run Code Online (Sandbox Code Playgroud)

您在这里有不同类型调用的完整解释 http://www.rgagnon.com/javadetails/java-0014.html

  • Process.waitFor() 实际上返回进程的退出代码,因此您可以将最后两行合并为“int.exitVal = p.waitFor();” (7认同)

cme*_*oli 5

以下是如何使用ProcessBuilder执行远程应用程序的示例。由于您不关心输入/输出和/或错误,您可以执行以下操作:

List<String> args = new ArrayList<String>();
args.add ("script.bat"); // command name
args.add ("-option"); // optional args added as separate list items
ProcessBuilder pb = new ProcessBuilder (args);
Process p = pb.start();
p.waitFor();
Run Code Online (Sandbox Code Playgroud)

waitFor()方法将等到进程结束后再继续。该方法返回进程的错误代码,但由于您不关心它,因此我没有将其放在示例中。


Mot*_*Mot 4

我假设您知道如何使用ProcessBuilder.

从 Java 执行命令始终应该从进程中读取 stdout 和 stderr 流。否则,可能会发生缓冲区已满并且进程无法继续的情况,因为写入其 stdout 或 stderr 会阻塞。