作者pao0111 (理想绝非空想)
看板java
标题Re: [J2SE] Jdialog的的dispose
时间Wed Mar 12 17:17:43 2008
依照 Swing 的规格,所有变更 Component 显示状态的动作,
皆需要在 Event Dispatch Thread 中执行。
这是为了达到 Thread safe 。
所以正确的作法应当是:
JProgressBar bar = new JProgressBar();
bar.setIndeterminate(true);
final JDialog dialog = new JDialog();
dialog.setModal(true);
dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
dialog.add(bar, BorderLayout.CENTER);
dialog.add(new JLabel("请耐心等候..."), BorderLayout.NORTH);
dialog.pack();
dialog.setLocationRelativeTo(null);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
dialog.setVisible(true);
}
});
try {
// 在此做资料探勘
Thread.sleep(9999999);
} catch (InterruptedException e) {
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
dialog.setVisible(false);
}
});
dialog.dispose();
我想这应该能解决你遇到的问题。
Pao
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.18.62.71
※ 编辑: pao0111 来自: 163.18.62.71 (03/12 17:19)
※ 编辑: pao0111 来自: 163.18.62.71 (03/12 17:21)
1F:推 slalala:不过 不是用 JProgressBar呀 还是感谢~ 03/13 00:40
2F:→ pao0111:这例子的JProgressBar只有作效果,拿掉也不影响的 03/13 08:06
3F:→ pao0111:重点是在於SwingUtilities.invokeLater。 03/13 08:08