Java 使用 ProcessBuilder 启动新进程时添加参数

Java adding args when starting a new process using ProcessBuilder

当启动一个单独的进程时,运行 是一个名为 Program.java 的程序,我想知道如何向其中添加参数。对于那些不知道的人,args 是你在很多 Java 程序开始时看到的东西: public static void main(String[] args) 我知道你什么时候 运行 一个 .class 文件从终端,你键入 java [程序名称] [args]。那么如何在启动单独的进程时添加 args 呢?我的代码:

Class klass=Program.class;
String[] output=new String[2];
String javaHome = System.getProperty("java.home");
String javaBin = javaHome +
     File.separator + "bin" +
     File.separator + "java";
String classpath = System.getProperty("java.class.path");
String className = klass.getCanonicalName();

ProcessBuilder builder = new ProcessBuilder(
     javaBin, "-cp", classpath, className);
builder.redirectErrorStream(true);

Process process = builder.start();
int in = -1;
InputStream is = process.getInputStream();
String[] outputs=new String[2];
try {
    while ((in = is.read()) != -1) {
       outputs[0]=outputs[0]+(char)in;
    }
} catch (IOException ex) {
    ex.printStackTrace();
}
builder.redirectErrorStream(true);
try {
    while ((in = is.read()) != -1) {
           outputs[1]=outputs[1]+(char)in;
    }
} catch (IOException ex) {
    ex.printStackTrace();
}
int exitCode = process.waitFor();
System.out.println("Exited with " + exitCode);

这与 this question 不同,因为我的问题使用 ProcessBuilder 创建流程。

谢谢

您可以将它们添加到 ProcessBuilder(String...) constructor 调用中(在您的情况下是在 className 之后),例如

ProcessBuilder builder = new ProcessBuilder(
 javaBin, "-cp", classpath, className, args);

你可以这样使用它:

ProcessBuilder pb = new ProcessBuilder();
pb.directory(new File(rootPath));
List<String> command = new ArrayList<String>();
command.add("java");
command.add(String.format("-XX:MaxPermSize=%sm", 512));
command.add("-jar");
command.add(jarName);
command.add("parameter1=123");
command.add("parameter2=456");
pb.command(command);
Process process = pb.start();