作者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)
推 slalala:不過 不是用 JProgressBar呀 還是感謝~ 03/13 00:40
→ pao0111:這例子的JProgressBar只有作效果,拿掉也不影響的 03/13 08:06
→ pao0111:重點是在於SwingUtilities.invokeLater。 03/13 08:08