Process.StandardInput.WriteLine不能使用Java.exe

时间:2013-01-24 19:43:45

标签: c# java system.diagnostics

我遇到以下代码的问题:

private void Form1_Load(object sender, EventArgs e)
{
    cmdOutput = new StringBuilder("");
    cmdProcess = new Process();

    cmdProcess.StartInfo.WorkingDirectory = @"C:\android-sdk\tools";
    cmdProcess.StartInfo.FileName = @"java";
    cmdProcess.StartInfo.Arguments = @"-Xmx512m -Djava.ext.dirs=lib\;lib\x86_64 -Dcom.android.monkeyrunner.bindir=..\framework -jar lib\monkeyrunner.jar";

    cmdProcess.StartInfo.UseShellExecute = false;
    cmdProcess.StartInfo.CreateNoWindow = true;
    cmdProcess.StartInfo.RedirectStandardOutput = true;
    cmdProcess.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);
    cmdProcess.StartInfo.RedirectStandardInput = true;


    cmdProcess.Start();

    cmdStreamWriter = cmdProcess.StandardInput;
    cmdProcess.BeginOutputReadLine();

    // Even if i fire this later it doesn't work. 
    cmdStreamWriter.WriteLine(@"print 'Hello World'");
}

问题是:

cmdStreamWriter.WriteLine(@"print 'Hello World'"); 

没有做任何事情。没有任何东西写入java进程。

输出似乎工作正常(通过将脚本直接加载到monkeyrunner.jar进行测试。但经过多次尝试后我没有得到任何输入。

如果我将流程更改为“cmd”

,这样可以正常工作

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题:

从另一个问题我得知Jline(基于java的命令行扩展)正在被使用。经过一些谷歌搜索后,我发现用以下代码启动Java应用程序:

 cmdProcess.StartInfo.Arguments = @"-Xmx512m -Djava.ext.dirs=lib\;lib\x86_64 -Dcom.android.monkeyrunner.bindir=..\framework 
-Djline.terminal=jline.UnsupportedTerminal -jar lib\monkeyrunner.jar";

修正案:

-Djline.terminal=jline.UnsupportedTerminal

这会停止加载Jline并允许标准输入再次正常工作。

有关-Djline.terminal参数的更多信息,请访问:

http://jline.sourceforge.net/ - 安装。