2011-03-01 61 views
1

這是我的問題: 我有一個.bat文件,它有許多命令。當我使用processbuilder從我的java程序中調用這個bat文件時,它開始在.bat文件中逐行執行命令。但是,當它到達執行perl程序的最後一行時,它會掛起並且程序永遠不會結束。它永遠掛在那裏。任何想法爲什麼這可能會發生。僅供參考,perl代碼沒有問題,我可以執行從Java程序執行批處理文件時出錯

+1

你可以從java運行perl,帶或不帶'.bat'腳本嗎? – 2011-03-01 10:36:23

+0

我的猜測是PATH環境var沒有設置,因此沒有找到perl解釋器。嘗試提供tjhe perl解釋器的完整路徑:c:\ path \ to \ perl \ perl.exe ... – rene 2011-03-01 10:39:14

+1

我想我們需要看到批處理文件和Perl腳本有任何幫助。看看你是否可以在一個小例子中複製bug行爲,你可以在這裏發表。 – 2011-03-01 13:25:39

回答

0

嘿,我能夠解決這個問題。我所要做的只是在我的java代碼中包含一個關閉進程輸出流的聲明。沒有它,它正在等待命令行中的perl程序被永久執行。我不完全確定這種行爲,任何信息都可以幫助

2

您的perl程序是否寫入標準輸出? 我懷疑問題是Java進程將子進程的標準輸出和標準錯誤輸出重定向到管道。 該管道的接收端連接到java程序,因此如果您未能讀取其輸出,則從Java調用的寫入標準輸出/錯誤的任何子進程都會阻塞。 您必須從Java程序中刪除perl程序的輸出或讀取子進程的輸出(Process.getInputStream()和/或Process.getErrorStream())。

+0

:嘿,我能夠解決這個問題。我所要做的只是在我的java代碼中包含一個關閉進程輸出流的聲明。沒有它,它正在等待命令行中的perl程序被永久執行。我對這種行爲並不確定,任何信息都會有所幫助。 – Max 2011-03-06 06:55:52