2013-07-13 39 views
2

我开发汽车管理系统的程序。然后,我想在汽车进来并开车时向该公司的所有者发送邮件。 我的代码可以成功发送邮件,但我注意到,在发送邮件时,其他JFrame窗口冻结(我无法对所有JFrame窗口执行任何操作)直到邮件发送完成。 这是通常的Javamail或有办法让其他JFrame仍然工作?所有JFrame冻结的同时做JavaMail

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

+0

你必须使用另一个线程 – nachokk

+0

你需要发送只有一个e-mail或多少?如果您需要发送一些电子邮件,您可能应该显示一些进度条或电子邮件的结果。 – Thorn

回答

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); 
    } 
} 
+0

+1好(编辑&)答案。 –

+0

谢谢!我也用你提供的链接阅读你的代码,它的工作。 – user2549814