【发布时间】:2013-04-09 12:16:39
【问题描述】:
我正在使用我的 java 程序中的 Processbuilder 在后端执行一个外部进程。我正在使用 process.waitFor 来获取进程的退出状态。后端进程将花费时间,这取决于所提供的输入。所以我需要为不确定的时间制作一个进度条,直到进程完成。这只是为了通知用户后端有一个进程。
try {
button.setEnabled(false);
this.progressbar.setVisible(true);
this.progressbar.setIndeterminate(true);
}
catch(Exception e)
{
e.printStackTrace();
}
perform(this);
}
}
public void perform(JFrame f)
{
String cmd[]={"cmd", "/c","a.exe:};
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.directory(new File(dir_path));
pb.redirectErrorStream(true);
try {
p = pb.start();
} catch (IOException ex) {
Logger.getLogger(execution.class.getName()).log(Level.SEVERE, null, ex);
}
try
{
int exitVal = p.waitFor();
if(exitVal>0)
{
this.progressbar.setVisible(false);
this.progressbar.setIndeterminate(false);
this.button.setEnabled(true);
}
if(p.waitFor()==0)
{
this.progressbar.setVisible(false);
this.progressbar.setIndeterminate(false);
JOptionPane.showMessageDialog(f,"Scan completed successfully.");
}
} catch (InterruptedException ex) {
Logger.getLogger(execution.class.getName()).log(Level.SEVERE, null, ex);
}
}
Button 是调用调用的按钮的名称。但是我面临的问题是函数调用 perform 是在没有执行这些语句的情况下进行的。
try {
button.setEnabled(false);
this.progressbar.setVisible(true);
this.progressbar.setIndeterminate(true);
}
catch(Exception e)
{
e.printStackTrace();
}
该功能执行后按钮被禁用。 1)我可以知道为什么会这样吗? 2) 我可以知道在完成之前制作进度条指示后端进度的解决方案吗?
提前致谢。
【问题讨论】:
-
我可能会尝试重构它,所以它使用
SwingWorker
标签: java multithreading process progress-bar processbuilder