2011-05-10 91 views
0

我有一些啓動java進程的c#代碼。在運行Windows 7的一臺機器上,它工作正常。在另一個正在運行的XP上它不會。下面是代碼...啓動過程中重定向標準錯誤和標準輸入的問題

mServerProcess = new Process(); 
mServerProcess.StartInfo.FileName = "java"; 
mServerProcess.StartInfo.Arguments = "-jar my.jar"; 
mServerProcess.StartInfo.WorkingDirectory = "C:\\my_server"; 
mServerProcess.StartInfo.UseShellExecute = false; 
mServerProcess.StartInfo.CreateNoWindow = true; 
mServerProcess.StartInfo.RedirectStandardOutput = true; 
mServerProcess.StartInfo.RedirectStandardError = true; 
mServerProcess.StartInfo.RedirectStandardInput = true; 
mServerProcess.OutputDataReceived += new DataReceivedEventHandler(ServerOutputHandler); 
mServerProcess.ErrorDataReceived += new DataReceivedEventHandler(ServerErrorHandler); 
mServerProcess.SynchronizingObject = this.console; 

// Start the process. 
mServerProcess.Start(); 

// Start the asynchronous read of the sort output stream. 
mServerProcess.BeginOutputReadLine(); 
mServerProcess.BeginErrorReadLine(); 

在XP的機器我從來沒有從進程的標準錯誤來的文字,和一般的進程似乎打破。我無法從標準輸入流中發送任何內容。

現在......有趣的是,如果我將重定向標準輸入的代碼註釋掉,我會得到標準錯誤。但是,當然,我也需要重定向標準輸入。

有沒有人見過這個?...重定向標準輸入和標準錯誤導致問題?

再次...我沒有這個問題在我的Windows 7框。

感謝, 巴茲

UPDATE:

我使用了Java Logger類輸出信息從我的Java應用程序。我認爲這個問題與Java特別有關,它的ConsoleHandler類如何處理標準錯誤。這讓我瘋狂!

回答

1

該進程可能正在等待一些輸入。

試着給它一些輸入。

+0

+1 - 燁 - *「如果我註釋掉重定向標準輸入的代碼......」 *是一條走不通的贈品:-) – 2011-05-10 01:33:36

+0

試過了。依然沒有。 – BuzzB 2011-05-12 04:06:52

0

如果重定向輸入和輸出,則可能會使I/O發生死鎖。根據緩衝區的不同,這可能在不同的操作系統或不同的輸入和輸出上有所不同。例如,它可能看起來工作正常時,與1k的輸入,但與4k掛起。查看文檔並搜索僵局:

+0

我已經遍佈那個頁面。我看不出我的方法有什麼問題。我沒有使用流上的任何阻塞讀取調用。我正在使用異步調用。 – BuzzB 2011-05-12 04:09:08

0

你調用使用的JLine Java進程?如果是這樣,那麼你需要用下面的參數來調用它:

-Djline.terminal=jline.UnsupportedTerminal 
相關問題