执行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); } }