2013-01-24 70 views
0

我在用下面的代碼的問題:Process.StandardInput.WriteLine不工作JAVA.EXE

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

「java」看起來不像一個有效的文件名。不應該是「java.exe」或「javaw.exe」? –

+0

Java是好的,就像打入cmd進入開始 - >運行而不是cmd.exe – james

+0

並且「java」住在工作目錄中嗎?或者在其他一些?也許指定「java」應用程序的完整路徑。 –

回答

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/ - 安裝。