我在後端使用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