我有一些启动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盒子里没有这个问题。
谢谢, 蜂音
更新:
我正在使用java Logger类从我的java应用程序输出信息。我认为这个问题与Java有关,以及它的ConsoleHandler类如何处理标准错误。这让我疯了!
答案 0 :(得分:1)
这个过程可能正在等待一些输入。
尝试给它一些输入。
答案 1 :(得分:0)
如果重定向输入和输出,则可能会使I / O死锁。根据缓冲,这可能在不同的操作系统或不同的输入和输出上表现不同。例如,使用1k输入时它似乎工作正常,但挂起4k。请参阅文档并搜索死锁:
答案 2 :(得分:0)
您是否正在调用使用Jline的Java进程?如果是,那么您需要使用以下参数调用它:
-Djline.terminal=jline.UnsupportedTerminal