“ProcessBuilder.command”的参数语法

时间:2012-04-02 18:05:19

标签: java runtime.exec

我试图将jar文件作为一个进程启动,我需要运行的命令是这样的:

“java -Xmx512M -Xms512M -jar myapp.jar args”

这是我目前工作的代码:

ProcessBuilder builder = new ProcessBuilder();
String[] command = {"java", "-jar", "myapp.jar"};
builder.command(command);
Process process = builder.start();

OutputStream stdin = process.getOutputStream();
InputStream stdout = process.getInputStream();

BufferedReader reader = new BufferedReader(new InputStreamReader(stdout));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));

ReaderThread rt = new ReaderThread(reader);
Thread handle = new Thread(rt, "ReaderThread");
handle.start();

但是如果我尝试添加类似“-Xmx1024M”的东西,我会得到一个“Maximun堆错误”,或者如果我尝试在最后一个字符串中添加“args”,那么我得到“无法访问jarfile”。< / p>

那么为系统调用添加所有参数以正确顺序完成的正确语法是什么?

非常感谢你的帮助。

编辑:

我也试过传递整个命令,但由于某种原因,它没有用。

2 个答案:

答案 0 :(得分:1)

您似乎没有处理进程的错误输入流。

请在这里查看:What to do when Runtime exec Won't这将解释问题并为您提供解决方案:使用流gobblers。

答案 1 :(得分:0)

您可能需要为进程设置工作(也称为当前)目录,以便它可以找到jar文件。或者使用-classpath指定类路径,因此out包含该jar。

另外,请吞噬输出