我开发汽车管理系统程序。然后我想在汽车进出时给这家公司的老板发邮件。我的代码可以成功发送邮件,但我注意到在发送邮件时,其他 JFrame 窗口被冻结(我无法在所有 JFrame 窗口上执行任何操作),直到邮件发送完成。这通常适用于 Javamail 还是有办法让其他 JFrame 仍然工作?
在我的程序中,完成发送一封邮件大约需要 10 秒。
我开发汽车管理系统程序。然后我想在汽车进出时给这家公司的老板发邮件。我的代码可以成功发送邮件,但我注意到在发送邮件时,其他 JFrame 窗口被冻结(我无法在所有 JFrame 窗口上执行任何操作),直到邮件发送完成。这通常适用于 Javamail 还是有办法让其他 JFrame 仍然工作?
在我的程序中,完成发送一封邮件大约需要 10 秒。
当您执行繁重的任务时,您应该在另一个线程中运行它们,而不是与 gui 相同。如果你在Event Dispatch Thread中运行,那么 gui 将冻结直到完成。
你可以在这里使用SwingWorker这是一个我非常喜欢Swing Worker 的例子
例子:
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);
}
}