Использование элемента управления JavaFX TextArea в качестве терминала приложения spring-shell

Я работаю в инструменте, который требует от пользователя взаимодействия с консолью, и для каждой введенной команды есть графическое представление с результатом команды. Я хотел бы иметь одно приложение JavaFX с TextArea, выступающим в качестве консоли для приложения spring-shell, и холстом, выступающим в качестве вывода визуализации.

Как я могу заменить стандартный ввод/вывод, используемый spring-shell, на TextArea?

Спасибо


person Orlando Garcia    schedule 21.04.2020    source источник
comment
Вы запускаете оболочку в том же процессе, что и JavaFX, или в другом процессе? Если последнее, просто запустите процесс с ProcessBuilder, получите Process, а затем вы можете писать на его стандартный ввод и читать из его стандартного вывода и стандартной ошибки (убедитесь, что вы прочитали оба, иначе буферы заполнятся и процесс зависнет). Вы захотите сделать это в отдельных потоках, что означает, что вам придется взаимодействовать с потоком приложения JavaFX, чтобы обновить файл TextArea.   -  person Slaw    schedule 22.04.2020
comment
Спасибо за ваш ответ @Slaw. Я запускаю оболочку в том же процессе JavaFX. Я хотел бы написать команду в TextArea, нажать Enter и выполнить одну из команд, которые я зарегистрировал как доступные команды spring-shell. Метод, который определяет, что делает команда, может потребовать обновления стороны холста приложения JavaFX. Я боюсь, что если я использую другой процесс, у меня не будет прямой связи с компонентами JavaFX, пока команда не завершит свое выполнение.   -  person Orlando Garcia    schedule 22.04.2020
comment
Проверьте это: stackoverflow.com/questions/13841884. Если spring-shell использует стандартный ввод/вывод, вы можете заменить потоки, например, на System.setOut(...). Если вы можете сказать Spring-Shell использовать пользовательский поток ввода/вывода, процесс будет таким же, просто он происходит на уровне Spring, а не на системном уровне. Имейте в виду, что первый подход будет перенаправлять весь системный вывод в вашу текстовую область.   -  person Slaw    schedule 22.04.2020