0

次のコードで問題が発生しています。

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」に変更すると、これは正常に機能します

4

1 に答える 1

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/-インストール。

于 2013-01-25T10:21:48.183 に答える