Я создаю графический интерфейс с использованием Java. Этот графический интерфейс запускает программу из командной строки, используя класс ProcessBuilder.
Немного информации о запущенном процессе: из командной строки он создает другое окно и выводит информацию в указанное окно.
В моем окне графического интерфейса у меня есть текстовая область, куда я хотел бы перенаправить указанный вывод. Первоначально я намеревался использовать объект SwingWorker, чтобы постоянно проверять наличие дополнительных выходных данных и не задерживать графический интерфейс. Чтобы проверить и убедиться, что у меня есть исходный синтаксис (даже без графического интерфейса), я подумал, что напечатаю вывод из окна вторичного процесса в 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 в качестве параметра.
Спасибо за ваше время.