2012-06-28 85 views
1

我想從我的Java Web應用程序運行C++可執行文件。當我進入相關頁面時,它會執行命令並運行可執行文件,但不會產生任何輸出。從Java運行C++可執行文件時沒有錯誤或輸出

這裏是我的代碼:

URL createWav = QRcodeController.class.getClassLoader().getResource("createWav"); 
log.info("The path of the c++ executable obtained: "+ createWav.getPath()); 
Process p1 = Runtime.getRuntime().exec("chmod 777 " + createWav.getPath()); 
p1.waitFor(); 
int exitVal=1; 
try { 
     Process p2 = Runtime.getRuntime().exec(createWav.getPath(), args); 
     exitVal = p2.waitFor(); 
} 
catch (Exception e) 
{ 
    log.error(e.getStackTrace()); 
} 
if(exitVal == 1) 
    throw new Exception("Error in c++ program"); 

所以C++程序運行正常,但它不會產生它應該是文件它不會引發任何錯誤。當我在同一臺機器上從命令行運行相同的命令時,它完美地生成了所需的文件。我不確定我做錯了什麼。

+1

你可以用硬編碼路徑重試嗎?這可能是由Java程序創建的文件,但位於不同的位置。 – Stefan

+0

它無法運行該程序,因此我無法找到該文件。謝謝。 – ishan

回答

1

C++程序正在將其輸出寫入管道,而不是Java程序的標準輸出。使用Process.getOutputStream()訪問流,或者使用Java 1.7,採用ProcessBuilder在那裏你可以使用redirectOutput這樣的:

pb.redirectOutput(ProcessBuilder.Redirect.INHERIT) 

如果你的C++程序威力寫東西到其標準錯誤流,你應該處理以同樣的方式。

另外請注意,無論是留下這些流連接到管道和從管道讀取可能會導致應用程序的輸出塊如果與管道相關的緩衝區已滿。要簡單地忽略輸出,你必須明確地將其重定向到/dev/null。這不是你目前的目標,但它可能處於不同的情況。

2

process獲取輸出流和錯誤流,看看會發生什麼。

現在你正在盲目工作。

+0

謝謝我能夠看到輸出現在和當前調試它。謝謝您的幫助。 – ishan

相關問題