Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
所有JFrame在执行JavaMail时都会冻结_Java_Swing_Jframe_Jakarta Mail_Event Dispatch Thread - Fatal编程技术网

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

所有JFrame在执行JavaMail时都会冻结,java,swing,jframe,jakarta-mail,event-dispatch-thread,Java,Swing,Jframe,Jakarta Mail,Event Dispatch Thread,我开发了汽车管理系统的程序。然后我想在汽车进出时给这家公司的老板发邮件。 我的代码可以成功地发送邮件,但我注意到,在邮件发送完成之前,其他JFrame窗口处于冻结状态(我无法在所有JFrame窗口上执行任何操作)。 这通常适用于Javamail,还是有办法让其他JFrame仍能工作 在我的程序中,完成发送一封邮件大约需要10秒钟。当您执行繁重的任务时,您应该在其他线程中运行它们,而不是在gui中运行它们。如果您在运行,那么gui将冻结,直到完成 你可以用这个例子,我很喜欢 例如: class W

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


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

当您执行繁重的任务时,您应该在其他线程中运行它们,而不是在gui中运行它们。如果您在运行,那么gui将冻结,直到完成

你可以用这个例子,我很喜欢

例如:

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);
    }
}
类工作者扩展SwingWorker{
@凌驾
受保护的字符串doInBackground()引发异常{
//这是你的邮件
返回“完成”;
    }
@覆盖
受保护的void done(){
超级。完成();
//这是在EDT中执行的
showMessageDialog(null,“已发送消息”,“成功”,JOptionPane.INFORMATION\u消息);
    }
}

您必须使用其他线程您只需要发送一封电子邮件还是多封?如果您需要发送大量电子邮件,您可能应该显示一些进度条或电子邮件的结果。谢谢!我阅读您的代码也与链接,您提供和它的工作。