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 は、呼び出しを呼び出すボタンの名前です。しかし、私が直面している問題は、関数呼び出しの実行がこれらのステートメントを実行せずに行われることです。
try {
button.setEnabled(false);
this.progressbar.setVisible(true);
this.progressbar.setIndeterminate(true);
}
catch(Exception e)
{
e.printStackTrace();
}
その機能の実行後、ボタンは無効になります。1)なぜそれが起こるのか知っていますか?2) 完了するまでバックエンドの進行状況を示すプログレスバーを作成するための解決策を教えてください。
前もって感謝します。