Я читаю вывод приложения java, запущенного с помощью Process, и читаю stdError, stdOutout и использую stdInput для отправки команд.Вот соответствующий код:
int mem = Properties.Settings.Default.mem_max;
string locale = Properties.Settings.Default.location;
Process bukkit_jva = new Process();
bukkit_jva.StartInfo.FileName = "java";
//bukkit_jva.StartInfo.Arguments = "-Xmx" + mem + "M -Xms" + mem + "M -jar " + locale + "bukkit.jar";
bukkit_jva.StartInfo.Arguments = "-Xmx512M -Xms512M -jar C:\\bukkit\\bukkit.jar";
bukkit_jva.StartInfo.UseShellExecute = false;
bukkit_jva.StartInfo.CreateNoWindow = true;
bukkit_jva.StartInfo.RedirectStandardError = true;
bukkit_jva.StartInfo.RedirectStandardOutput = true;
bukkit_jva.StartInfo.RedirectStandardInput = true;
bukkit_jva.Start();
//start reading output
SetText(bukkit_jva.StandardOutput.ReadLine());
SetText(bukkit_jva.StandardOutput.ReadLine());
SetText(bukkit_jva.StandardOutput.ReadLine());
SetText(bukkit_jva.StandardOutput.ReadLine());
StreamReader err = bukkit_jva.StandardError;
StreamReader output = bukkit_jva.StandardOutput;
StreamWriter writer = bukkit_jva.StandardInput;
SetText(err.Peek().ToString());
while (false == false)
{
if (vars.input != null)
{
writer.WriteLine(vars.input);
vars.input = null;
}
SetText(output.ReadLine() + err.ReadLine());
}
}
SetText()
добавляет строку в список строк.
Моя проблема в том, что Java-приложение иногда возвращает строку, даже если нет ввода, поэтому мне всегда нужно проверять новую строку.но если мне нужно отправить команду, а новых выходных данных нет, она не будет отправлена.
Я пробовал разные операторы If на readline, но он возвращал только первые несколько строк, тогда он останавливался
По сути, кажется, что он приостанавливает цикл, если для него нет новой строки для чтения.
Как я могу либо настроить свой цикл чтения / записи по-другому, либо заставить цикл отменить паузу?
Спасибо, Адам