Привет мой спаситель!
Проблема в том что Progressbar обновляется только после окончания цикла, не могу никак заставить обновится Progressbar в процессе работы, пробовал и invokeLater, и SwingWorker, и Task, ничего не выходит, обновление происходит только после завершения цикла.
Вот код метода, он вызывается из GUI потока:
private void runCommand(String... args) throws IOException {
Runtime rt = Runtime.getRuntime();
rt.exec(args);
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(proc.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(proc.getErrorStream()));
appendToLog("-");
String s = null;
try {
while ((s = stdInput.readLine()) != null) {
appendToLog(s + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
try {
while ((s = stdError.readLine()) != null) {
Double progress = Double.parseDouble(s.split("%")[0]) / 100;
progressbar.setProgress(progress));
}
} catch (IOException e) {
e.printStackTrace();
}
}
В месте "progressbar.setProgress(progress));", нужно обновить данные прогрес бара, в данном случае конечно он обновится только после окончания работы, т.к. основной поток занят, но странно то что даже с SwingWorker ничего не вышло. Делал SwingWorker с publish и process, ставил точки останова, publish и process срабатывали, в процессе работы цикла новые значения поступали в process, там был код обновляющий прогресс бар согласно последнего значения в чанке "progressbar.setProgress(chunk.get(chunk.size()-1)));", но сам прогресс бар все равно обновлялся только после окончания цикла, когда SwingWorker выходил в done(); и завершался.
Хотя на сколько вычитал, publish и process как раз и нужны для вывода данных в GUI поток, или я что то не верно понимаю?
Прошу помощи.