Process.StandardInput.WriteLine 在 Java.exe 上不起作用

本文关键字:exe 不起作用 Java StandardInput WriteLine Process | 更新日期: 2023-09-27 17:56:07

我在以下代码中遇到问题:

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",这确实可以正常工作

Process.StandardInput.WriteLine 在 Java.exe 上不起作用

我已经设法解决了这个问题:

从我遇到的另一个问题中,我发现正在使用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/- 安装。