当启动一个运行名为Array
(
[1] => one
[3] => three
[5] => fayve
[6] => six
)
Array
(
[2] => two
[5] => five
[1] => 0
[3] => 0
[6] => 0
)
的程序的单独进程时,我想知道如何向此添加Program.java
。对于那些不了解的人,args
是你在许多Java程序开始时看到的东西:
args
我知道当您从终端运行public static void main(String[] args)
文件时,您需要输入.class
。那么如何在启动单独的流程时添加java [program name] [args]
?我的代码:
args
这与this question不同,因为我的问题使用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);
来创建流程。
由于
答案 0 :(得分:1)
" ARGS"只是初始JVM切换后的命令行参数,如-cp,-D参数和入口点类。
以下将启动一个新的JVM进程,它将加载org.example.MainProgram并将其作为args数组传递给它{。}}。
[arg0, arg1, arg2]
因此,在您的示例中,只需在ProcessBuilder构造函数的末尾添加参数
java -cp bin/* org.example.MainProgram arg0 arg1 arg2
如果从另一个Java应用程序启动Java应用程序,还可以使用另一种策略。这不允许您捕获标准输出,但是如果您控制两个应用程序,我会考虑使用API来访问已启动应用程序的功能,而不是通过流进行通信,解析等......
ProcessBuilder builder = new ProcessBuilder(
javaBin, "-cp", classpath, className, "arg0", "arg1", "arg2");