首先,建议在Swing Event-Dispatch线程中进行所有GUI更新,即使用SwingUtilites
类。
其次,您JDialog
是模态的,因此阻塞了setVisible(true)
调用该方法的线程(在您的情况下为Main线程,在以下情况下为Swing Event-Dispatch Thread)。
我并不是说以下代码是完美的,但是它应该使您步入正轨。
final JDialog waitForTrans = new JDialog((JFrame) null, true);
SwingWorker worker = new SwingWorker() {
public String doInBackground() throws Exception {
Thread.sleep(5000);
return null;
}
public void done() {
SwingUtilities.invokelater(new Runnable() {
public void run() {
waitForTrans.setVisible(false);
waitForTrans.dispose();
}
});
}
};
worker.execute();
SwingUtilities.invokelater(new Runnable() {
public void run() {
waitForTrans.add(new JLabel("Please Wait..."));
waitForTrans.setMinimumSize(new Dimension(300, 100));
waitForTrans.setVisible(true);
}
});
希望这可以帮助。