Я создаю графический интерфейс с использованием Java. Этот графический интерфейс запускает программу из командной строки, используя класс ProcessBuilder.
Небольшая информация о запущенном процессе: из командной строки он создает другое окно и печатает информацию в указанное окно.
В моем окне графического интерфейса есть текстовая область, куда я бы хотел перенаправить указанный вывод. Первоначально я намеревался использовать объект SwingWorker, чтобы постоянно проверять наличие выходных данных и не задерживать графический интерфейс. Чтобы проверить и убедиться, что у меня был оригинальный синтаксис (даже не вводя GUI в вещи), я решил напечатать вывод из окна вторичного процесса в System.out. Однако, похоже, что-то не так, поскольку я вижу вывод в окне вторичного процесса, но не терминал, с которого я работаю.
Выдержка из кода выглядит следующим образом:
Process p = pb.start();
Scanner s = new Scanner(p.getInputStream());
SwingWorker pipe = new SwingWorker<String, Void> (){
public String doInBackground(){
while(run){
if(s.hasNextLine()){
System.out.println("S has next!");
System.out.println(s.nextLine());
}
}
return null;
}
};
pipe.execute();
Логический прогон определен в другом месте программы и имеет значение false, когда процесс p завершается или принудительно завершается (дополнительный вопрос: действительно ли это плохая идея? Я чувствую, что это может быть ...).
У кого-нибудь есть идея, почему я никогда не получаю вывод, когда вижу, что он печатается в другом окне? Первоначально моей реакцией было использование p.getOutputStream (), но Scanner не принимает outputStream в качестве параметра.
Спасибо за ваше время.