私はSwingが初めてです。ユーザーがフォルダーを参照して選択できるようにするためのスイング ラッパーを作成しようとしています。そのフォルダー パスは、コンソール .exe プログラムへのコマンド ライン パラメーターとして使用されます。フォルダを選択して「プログラムの起動」ボタンをクリックした後、swing ウィンドウにプログラムが処理中であることを知らせるメッセージを表示し (そして時計のアニメーション GIF を表示)、外部プログラムを実行してから、別のメッセージを表示します。そのプログラムの実行が終了したとき。私が抱えている問題は、外部プログラムの実行が終了するまで「処理中」メッセージが表示されないことです。以下のコードでは、「プログラムの起動」ボタンがクリックされると、onLaunchProgram メソッドが実行されます。revalidate() と repaint() を試しましたが、変化はありませんでした。
...
JTextField txtFolder = new JTextField();
JLabel lblMessage = new JLabel();
JLabel lblPic = new JLabel();
JButton btnLaunchApplication = new JButton("Launch Program");
...
btnLaunchApplication.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
onLaunchProgram(evt);
}
});
...
if (returnVal == JFileChooser.APPROVE_OPTION){
file = fc.getSelectedFile();
txtFolder.setText(file.getAbsolutePath());
}
...
private void onLaunchProgram(ActionEvent evt) {
String strExecutableFilename = "MyExecutableProgam";
String strSourceFolder = txtFolder.getText();
String strCommand = strExecutableFilename + " " + strSourceFolder;
lblMessage.setText("Processing");
ImageIcon icon = new ImageIcon("clock.gif");
lblPic.setIcon(icon);
try {
Process procCommand = Runtime.getRuntime().exec(strCommand);
try {
procCommand.waitFor();
} catch (InterruptedException exception) {
exception.printStackTrace();
} finally {
}
lblMessage.setText("Finished");
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}