Я запускаю команду через runtime.exec, которая занимает некоторое время. Я хочу обновить мой ProgressBar.
Я уже получил желаемый системный выход, проблема в том, что я получаю все сразу, когда процесс завершен. И не шаг за шагом, чтобы обновить ProgressBar ...получить сразу системный выход во время выполнения (обновление ProgressBar) Java
Вот код
public Runtime rt = Runtime.getRuntime();
public Process pp;
public doit() {
try {
pp = rt.exec(a_long_timed_process);
InputStream is = pp.getErrorStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
if (line.contains("In:")) {
int a = line.indexOf("In:"); //get a string
int b = line.lastIndexOf("%"); //between
String lineout = line.substring(a + 3, b);//"0.00" and "99.99"
double nr = Double.parseDouble(lineout); //make it a double
int round = (int) nr; //make it a usable int
System.out.println(round);
myProgressBar.setValue(round); //UPDATE Progressbar
}
}
pp.waitFor();
} catch (IOException ex) {
Logger.getLogger(Sox.class.getName()).log(Level.SEVERE, null, ex);
} catch (InterruptedException ex) {
Logger.getLogger(Sox.class.getName()).log(Level.SEVERE, null, ex);
}
}
каждую помощь оценена
Спасибо заранее
Не блокируйте EDT (Thread Dispatch Thread) - графический интерфейс «замерзнет», когда это произойдет. Вместо вызова 'Thread.sleep (n)' реализовать Swing 'Timer' для повторения задач или' SwingWorker' для длительных задач. Подробнее см. [Параллелизм в Swing] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/). –