2013-05-06 143 views
1

在Linux(Debian的)很好,我可以运行此命令:不能用的ProcessBuilder运行程序,运行命令行

/usr/lib/jvm/jdk1.7.0_21/bin/java -jar ~/myjar.jar ".*" 

我试图用,而不是从一个Java程序运行:

ProcessBuilder pb = new ProcessBuilder(java, "-jar", "~/myjar.jar", "\".*\""); 

System.out.println(pb.command());打印以下,符合市场预期:

[/usr/lib/jvm/jdk1.7.0_21/bin/java, -jar, ~/myjar.jar, ".*"] 

不过,我不会从日得到的结果相同e程序(它运行但输出看起来好像没有适当考虑".*"参数)。

任何想法,为什么它不工作?

注意:相同的代码在Windows上正常工作。

+0

不要使用的ProcessBuilder严重,因为它不是稳定的,很容易失败的命令复杂的输出如'mvn build'。在可能的情况下使用shell脚本 – Amos 2017-11-12 09:15:50

+0

@Amos只要流程流消耗 - 我不知道你指的是什么稳定性问题,我会定期使用ProcessBuilder处理大输出的命令,不会有任何问题。 – assylias 2017-11-12 09:22:37

+0

Hello assylias,早先我们使用ProcessBuilder运行mvn(maven)命令,它通常会卡住,ProcessBuilder永远停在那里 – Amos 2017-11-12 09:26:03

回答

6

看起来通配符不是使用glob展开的。您可以使用,而不是一个shell:

ProcessBuilder pb = 
     new ProcessBuilder("bash", "-c", "java -jar ~/myjar.jar \".*\""); 

,也可以删除周围的通配符双引号:

ProcessBuilder pb = new ProcessBuilder(java, "-jar", "~/myjar.jar", ".*");