【问题标题】:All JFrame freeze while do JavaMail执行 JavaMail 时所有 JFrame 冻结
【发布时间】:2023-03-31 04:43:01
【问题描述】:

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

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

【问题讨论】:

  • 你必须使用另一个线程
  • 您需要发送一封还是多封?如果您需要发送多封电子邮件,您可能应该显示一些进度条或电子邮件的结果。

标签: java swing jframe jakarta-mail event-dispatch-thread


【解决方案1】:

当您执行繁重的任务时,您应该在另一个线程中运行它们,而不是在与 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);
    }
}

【讨论】:

  • 谢谢!我还通过您提供的链接阅读了您的代码并且它可以工作。
猜你喜欢
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
相关资源
最近更新 更多