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

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

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

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

你可以在这里使用SwingWorker是一个我非常喜欢Swing Worker Example的例子

例:

class Worker extends SwingWorker { @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);   } }