2012-04-02 88 views
1

林试图发起一个jar文件作为一个过程,我需要运行的命令是这样的:参数语法

“的java -Xmx512M -Xms512m罐子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”。

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

非常感谢您的帮助。

编辑:

我也试过路过整个命令,但由于某种原因,没有工作。

回答

1

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

请看看这里:What to do when Runtime exec Won't这将解释问题并给你一个解决方案:使用流戈布勒。

+0

我稍后处理流,但我不能让它执行我想要的完整命令。 thx – josephfley 2012-04-02 18:10:34

+0

@joseph:请说明你如何处理这些流。 – 2012-04-02 18:12:13

+0

我修改了原来的帖子以包含该部分,我可以发布完整的代码,但基本上一个线程读取输出,该部分工作,我只是不能将参数传递给子进程jar。 – josephfley 2012-04-02 18:19:52

0

您可能需要为进程设置工作(aka current)目录,以便它可以找到jar文件。或者用-classpath指定classpath,以便包含该jar。

另外,请狼吞虎咽输出