Прошу прощения, два дня бился головой о стену в попытке понять, почему оно не работает, оказывается искал не в том месте, дело в том что буфер сначала накапливался, а потом уже после того как поток закрылся, разом отдавал вывод в цикл и прогрессбар молниеносно набирал 100%. Т.е. с обновлением бара проблем нет, дело было в самом буфере, переписал метод:
private void runCmdWithProgress(String... args) throws IOException {
Process proc = Runtime.getRuntime().exec(args);
InputStream inputStream = proc.getErrorStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String s = null;
while ((s = bufferedReader.readLine()) != null) {
Double progress = Double.parseDouble(s.split("%")[0]) / 100;
Platform.runLater(() -> tab_adb_progressbar.setProgress(progress));
}
try {
proc.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Плюс к ответу Александра, да, данный метод из GUI потока нужно вызывать обязательно в отдельном, я делаю так же как у вас:
new Thread(() -> {
try {
runCmdWithProgress(commands);
Platform.runLater(() -> showDialogInformation(positive);
} catch (IOException e) {
e.printStackTrace();
}
}).start();
Всем спасибо!