Java开始一个单独的过程并附加args

时间:2015-06-26 15:15:03

标签: java args

当启动一个运行名为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); 来创建流程。

由于

1 个答案:

答案 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");