2010-05-11 61 views
0

不工作我使用的是java程序使用Runtime.exec(cmd)其中cmd是類似下面的產卵許多其他的Java進程:原油的Runtime.exec調用java命令在Linux

java -cp "MyJar.jar" pkg.MyClass some-more-arguments

運行相同命令行中的命令在Windows和Linux中工作正常,但是當我產卵的java進程通過Runtime.exec調用命令時,它在windows 中工作,但在Linux中不起作用。

在Linux中,我得到Exception in thread "main" java.lang.NoClassDefFoundError: pkg/MyClass

什麼想法?

+0

你檢查PATH和CLASSPATH變量? – Konerak 2010-05-11 12:30:52

+0

你是什麼意思?該命令應設置爲通過-cp – pstanton 2010-05-11 12:34:17

+0

classpath中都有些什麼,更多的論點? – aioobe 2010-05-11 12:51:24

回答

2

使用的Runtime.exec(的String []),沒有的Runtime.exec(字符串)

2

的這段代碼:

Process p = Runtime.getRuntime().exec("echo \"hello\""); 
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); 
System.out.println(br.readLine()); 

給出了這樣的輸出在Linux中:

"hello" 

引號(「)

所以我的建議是去掉引號(。 「)來自exec-line。執行命令時不會刪除它們,而是作爲參數傳遞給外部程序。這實際上相當於在提示中寫入java -cp \"MyJar.jar\" ...

如果需要的「-marks(MyJar.jar也許有空格或某事),我建議你看看Runtime.exec(String command, String[] envp)。這應該甚至使之更加獨立於平臺。

+0

好趕上,我不會感到驚訝,如果這是問題! – 2010-05-11 13:02:00

+0

謝謝,這似乎讓我更進一步,它的findi但是我遇到了另一個問題,請參閱編輯更多信息^ – pstanton 2010-05-11 18:48:23

+0

實際上,我的錯誤,它的工作原理。 – pstanton 2010-05-11 18:58:15