2012-05-02 106 views
0

我需要运行在Java控制台应用程序命令Runnnig一个Java控制台应用程序:从另一个Java应用程序cosole

/usr/bin/java -Xms512m -Xmx3072m -jar /Users/ivan/Desktop/market/market.jar 500 500 1 1 0.1 true true /Users/ivan/Desktop/market/files/simulationResult/ 

我试过,但没有奏效:

Process child = Runtime.getRuntime().exec(new String[]{command}); // command is the string written above 

我尝试了很多其他的东西,但我没有得到它。任何帮助?

顺便说一句,我使用Mac(如果它很重要)。

编辑:有了上面的代码,我得到以下错误:

Exception in thread "main" java.io.IOException: Cannot run program "java -Xms512m -Xmx3072m -jar /Users/ivan/Desktop/market/market.jar 500 500 1 1 0.1 true true /Users/ivan/Desktop/market/files/simulationResult/": error=2, No such file or directory 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460) 
    at java.lang.Runtime.exec(Runtime.java:593) 
    at java.lang.Runtime.exec(Runtime.java:466) 
    at SimulationStarter.main(SimulationStarter.java:59) 
Caused by: java.io.IOException: error=2, No such file or directory 
    at java.lang.UNIXProcess.forkAndExec(Native Method) 
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:53) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:91) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:453) 
... 3 more 

编辑#2:我现在就发,而不是字符串 “命令” 这样的:

  String[] commands = new String[]{ 
        "/bin/bash", "-c", 
        "\"/usr/bin/java -Xms512m -Xmx3072m -jar " + simulatorPath + " " 
        + var1 + " " 
        + var2 + " " 
        + var3 + " " 
        + var4 + " " 
        + var5 + " " 
        + var6 + " " 
        + var7 + " " 
        + var8 + " " 
        + "\""   
      }; 

但我仍然得到/bin/bash: /usr/bin/java -Xms512m -Xmx3072m -jar /Users/ivan/Desktop/market/market.jar 500 500 2 1 0.1 true true /Users/ivan/Desktop/market : No such file or directory

child.waitFor()返回数127

+1

你有什么错误? – m0skit0

+1

捕获该进程的输出/错误流并检查错误。然后回来的细节。 – Thomas

+0

如何在Mac上启动控制台?您需要使用Process启动控制台,然后将java行作为参数传递。 –

回答

2

如果命令是上述字符串然后

new String[]{command} 

会给你一个项目的字符串数组。你应该尝试类似于

command.split(' ') 

其中command是包含上述命令的String变量。

+0

实际上,您只需将命令作为单个字符串传递即可 - 这将在内部拆分为令牌,这将在此处做正确的事情。 –

+0

您应该使用字符串数组而不是单个命令。 –

+0

@MoritzPetersen有什么区别?该阵列应该如何? – Ivan