我在后端使用Processbuilder在我的Java程序中执行外部进程。我使用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);
}
}
按钮是调用该调用的按钮的名称。但是,我面临的问题是函数调用执行,而不执行这些语句。
try {
button.setEnabled(false);
this.progressbar.setVisible(true);
this.progressbar.setIndeterminate(true);
}
catch(Exception e)
{
e.printStackTrace();
}
按钮是函数的执行后被禁止。 1)我可以知道为什么会发生? 2)我可以知道解决方案使进度条指示后端进度,直到它完成吗?
在此先感谢。
我想也许尝试重构这一点,所以它的使用'SwingWorker' – Franklin 2013-04-09 12:21:46