Я обертываю приложение командной строки, которое я часто использую с интерфейсом GUI. В основном все сводится к его выполнению (как к процессу Java), а затем к анализу его ответов. Однако один из вариантов использования требует от конечного пользователя принятия дополнительных действий (приложение спрашивает, хочет ли пользователь перезаписать файл), и я не уверен, как с этим справиться. Как InputStream, так и ErrorStream зависает, как только появляется это приглашение. Вот (довольно общий) код метода executeCommand:
private void executeCommand(String command) {
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("bash", "-c", command);
try {
Process process = processBuilder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String line = null;
while ((line = reader.readLine()) != null) {
//some actions "File already exists. Do you want to overwrite ? [y/N]" line never gets to this point
}
while ((line = errorReader.readLine()) != null) {
//some actions "File already exists. Do you want to overwrite ? [y/N]" line never gets to this point
}
handleExitCode(process.waitFor(),"Success!");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
Я предполагаю, что «Файл уже существует. Вы хотите перезаписать? [Y / N]» приглашение передается через какой-то другой канал. Я просто не знаю, как справиться с этим. Для меня идеальным сценарием было бы, если бы я мог запросить messageBox с тем же вопросом и затем передать ответ соответствующим образом.