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