所有JFrame在执行JavaMail时都会冻结
我开发了汽车管理系统的程序。然后我想在汽车进出时给这家公司的老板发邮件。 我的代码可以成功地发送邮件,但我注意到,在邮件发送完成之前,其他JFrame窗口处于冻结状态(我无法在所有JFrame窗口上执行任何操作)。 这通常适用于Javamail,还是有办法让其他JFrame仍能工作所有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
在我的程序中,完成发送一封邮件大约需要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消息);
}
}
您必须使用其他线程您只需要发送一封电子邮件还是多封?如果您需要发送大量电子邮件,您可能应该显示一些进度条或电子邮件的结果。谢谢!我阅读您的代码也与链接,您提供和它的工作。