看板 java 關於我們 聯絡資訊
依照 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