Почему я получаю вывод процесса после его завершения? Мне нужно, чтобы процесс выводился «вживую», пока он запущен, а не после его завершения. Я хотел бы запустить такой процесс, как jboss, который регистрирует стандартный вывод, поэтому мне нужна эта информация вовремя, а не после завершения процесса. Спасибо за ответы.
Вот мой код:
try {
process = processBuilder.start();
processOutput = process.getOutputStream();
processInput = process.getInputStream();
processReader = new BufferedReader(new InputStreamReader(
processInput));
processWriter = new BufferedWriter(new OutputStreamWriter(
processOutput));
while ((line = processReader.readLine()) != null) {
System.out.println(line);
}
processReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Расширение:
Итак, я хотел бы запустить внешнюю программу из плагина Eclipse с помощью кнопки. Когда я нажимаю кнопку, запускается программа, и вывод внешней программы возвращается к консоли. Когда я нажимаю до остановки, программа останавливается. Итак, вот как я делаю пример создателя процесса. И я создал пример класса для тестирования компоновщика процессов без запуска всего проекта плагина в каждой модификации.
Вот мой экземпляр компоновщика процессов, который реализует Runnable:
@Override
public void run() {
List<String> command = new ArrayList<String>();
command.add(serverPath);
command.add(String.valueOf(count));
command.add(filePath);
processBuilder = new ProcessBuilder(command);
processBuilder.redirectErrorStream(true);
try {
process = processBuilder.start();
processOutput = process.getOutputStream();
processInput = process.getInputStream();
processReader = new BufferedReader(new InputStreamReader(
processInput));
processWriter = new BufferedWriter(new OutputStreamWriter(
processOutput));
System.out.println(process.waitFor());
while ((line = processReader.readLine()) != null) {
System.out.println(line);
}
processReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Параметры поступают в конструктор. И вот экземпляр:
public static void main(String[] args) throws Exception
{
SimulationProcess smp = new SimulationProcess(count, "file",
"program_name");
smp.run();
}