在执行JavaMail时,所有JFrame都会冻结

时间:2013-07-13 04:54:56

标签: java swing jframe javamail event-dispatch-thread

我开发汽车管理系统的程序。然后,当汽车进来和开车时,我想发送邮件给这家公司的老板。  我的代码可以成功发送邮件,但我注意到,当邮件发送完成时,其他JFrame窗口会冻结(我无法在所有JFrame窗口上执行任何操作)。  这通常适用于Javamail还是有办法让其他JFrame仍在工作?

在我的程序中,完成发送一封邮件大约需要10秒钟。

1 个答案:

答案 0 :(得分:6)

当你执行繁重的任务时,你应该在另一个线程中运行它们,而不是像gui一样。如果你在Event Dispatch Thread跑步,那么gui会冻结直到完成。

您可以使用SwingWorker这是一个我非常喜欢Swing Worker Example

的示例

示例:

class Worker extends SwingWorker<String, Object> {

    @Override
    protected String doInBackground() throws Exception {
       //here you send the mail
       return "DONE";
    }

    @Override
    protected void done() {
        super.done();
        //this is executed in the EDT
        JOptionPane.showMessageDialog(null, "Message sent", "Success", JOptionPane.INFORMATION_MESSAGE);
    }
}