簡體   English   中英

Linux 上的 Java Runtime.exec 問題

[英]Java Runtime.exec woes on Linux

我正在開發一個 Java 程序,該程序設計用於 Linux 環境,該程序創建了一個運行另一個 Java 類的新 Java 進程,但我遇到了問題。 我終於解決了我所有的問題。 調用

Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'" })

在我的 Java 程序中返回

/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)

/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'

給出正確的輸出,沒有錯誤。

我知道 Runtime.exec 的使用非常復雜到完美,我已經解決了我之前從中得到的一些大問題,但是這個問題只是讓我感到困惑(例如 Runtime.exec 使用 StringTokenizer 搞砸了任何有空格的命令在它們中,這就是我調用接受字符串數組的重載的原因)。 但是,我仍然遇到問題,我不明白為什么。

你的第一次嘗試幾乎是正確的。

Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "java -classpath /home/kevin/workspace/Misc/bin HelloWorld" })

您不需要額外的引用,因為傳遞單個String參數會自動有效地引用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM