2011-05-29 205 views
1

我試圖使用Java運行外部程序Decoder.exe: 調用Runtime.getRuntime()EXEC( 「C:\ FULLPATH和那麼在\ Decoder.exe -h」 );像這樣:的Java的Runtime.exec導致程序崩潰

try{ 
     Process p = Runtime.getRuntime().exec("C:\\fullpath-and-so-on\\Decoder.exe -h"); 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 

這適用於我試過的所有其他程序。但是,每當我從java執行它Decoder.exe崩潰。 java執行正常,不會產生任何異常,但被調用的程序Decodes.exe停止工作。程序Decoder.exe在單獨的cmd窗口中運行時可以很好地執行。

有沒有人有類似的問題的經驗嗎?當java運行exec和程序在cmd.exe中運行時,有什麼不同?有沒有已知的解決方法,或者我只是在某個地方犯了錯誤?

非常感謝任何幫助! BR, Fredrik

+0

你有什麼會發生任何錯誤導致?執行環境可能與程序運行的文件夾略有不同。 – marsbear 2011-05-29 15:37:35

+0

沒有領先的東西。由於它是停止工作的被調用程序,所以我沒有獲得堆棧跟蹤。由於使用Decoder.exe的完整路徑,我認爲當前路徑無關緊要(?) – liket 2011-05-29 16:14:23

回答

2

停止工作你說?

decoder.exe是否將輸出寫入stderr或stdout?您必須在這種情況下讀取這些流,因爲這些流的緩衝區非常小,並且如果這些緩衝區滿了,執行將停止。

這是一個偉大的文章,這是老了,但它仍然成立: When Runtime.exec() won't

+0

非常感謝您的建議。但我不認爲這是問題的緩衝區。實施了建議的解決方案之一,並確保清空緩衝區。但是外部程序以同樣的方式崩潰。 – liket 2011-05-29 16:34:04

+0

這個過程是否依賴於環境變量?你在那種情況下也需要提供這些。你如何做到這一點也在文章中解釋。順便說一句。你是否創建了兩個線程同時讀取了這個流? – Kaj 2011-05-29 17:00:41

+0

不,它沒有,但在閱讀mKorbels的建議,並閱讀您建議的文章後,我發現這是一個問題,如何將參數傳遞給該程序。非常感謝您的幫助! – liket 2011-05-29 19:24:35