5
嘿,伙计们。我正在开发一个Java程序,专门用于Linux环境,该环境创建一个运行另一个Java类的新Java进程,但是我遇到了问题。我终于解决了所有问题。在我的Java程序调用在Linux上运行Java Runtime.exec
Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'" })
在任一标准输出/标准错误返回
/bin/bash: /usr/lib/jvm/java-6-openjdk/jre/bin/java -classpath /home/kevin/workspace/Misc/bin HelloWorld: No such file or directory
。如果我尝试
Runtime.getRuntime().exec(new String[] { "/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'" })
我得到一个Java异常
Cannot run program "/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'": java.io.IOException: error=2, No such file or directory
...
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
最后,用一个简单的
Runtime.getRuntime().exec("/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'")
给了我一个
-classpath: -c: line 0: unexpected EOF while looking for matching `''
-classpath: -c: line 1: syntax error: unexpected end of file
从标准输出/标准错误。
同时,创建一个新的行sh文件(和分配适当的权限),只有这(无#!/斌/庆典在文件的顶部)
/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'
给出了正确的输出没有错误。
据我所知,使用的Runtime.exec是相当复杂的完善,我已经解决了我之前从中得到了一些大的问题,但这个问题只是简单的让我为难,(如的Runtime.exec的使用的StringTokenizer的搞砸了任何在它们中有空格的命令,这就是为什么我调用接受String数组的重载)。但是,我仍然遇到问题,我不明白为什么。
先生,你是最伟大的。我简直不敢相信答案是那么简单!非常感谢你,我永远不会想到做那样的事情。 – 2011-03-29 22:14:58