gpt4 book ai didi

Java启动一个单独的进程并附加参数

转载 作者:行者123 更新时间:2023-11-30 08:06:10 25 4
gpt4 key购买 nike

当启动一个运行名为 Program.java 的程序的单独进程时,我想知道如何向其中添加 args 。对于那些不知道的人来说,args 是您在许多 Java 程序开头看到的东西:public static void main(String[] args) 我知道当您从终端运行 .class 文件时,您输入 java [program name] [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 来创建流程。

谢谢

最佳答案

“args”只是初始 JVM 开关之后的命令行参数,例如 -cp、-D 参数和入口点类。

下面将启动一个新的 JVM 进程,该进程将加载 org.example.MainProgram 并将其作为 args 数组传递给 [arg0, arg1, arg2]

java -cp bin/* org.example.MainProgram arg0 arg1 arg2

因此,在您的示例中,只需将参数添加到 ProcessBuilder 构造函数的末尾即可

ProcessBuilder builder = new ProcessBuilder(
javaBin, "-cp", classpath, className, "arg0", "arg1", "arg2");

如果从另一个 Java 应用程序启动 Java 应用程序,您还可以使用另一种策略。这不允许您捕获标准输出,但如果您控制这两个应用程序,我会考虑使用 API 来访问已启动应用程序的功能,而不是通过流、解析等进行通信...

new Thread(new Runnable() {
@Override
public void run() {
org.example.MainProgram.main(new String[]{"arg0", "arg1", "arg2"})
}
}).start();

关于Java启动一个单独的进程并附加参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31076743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com