我正在通过runtime.exec运行一个需要一些时间的命令。我想更新我的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(Event Dispatch Thread) - 当发生这种情况时GUI将“冻结”。而不是调用'Thread.sleep(n)'实现一个Swing'Timer'来重复执行任务,或者一个'SwingWorker'执行长时间运行的任务。有关更多详细信息,请参见[Swing中的并发](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 – 2013-03-08 00:08:45