我是 Swing 的新手。我正在尝试创建一个摆动包装器以允许用户浏览和选择一个文件夹,并且该文件夹路径用作控制台 .exe 程序的命令行参数。在他们选择文件夹并单击“启动程序”按钮后,我希望摆动窗口显示一条消息,告诉他们程序正在处理(并显示时钟的动画 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 {
}
}