車の管理システムのプログラムを開発しています。次に、車の入退去時にこの会社のオーナーにメールを送信したいと思います。私のコードはメールを正常に送信できますが、メールの送信中に、メールの送信が完了するまで他の JFrame ウィンドウがフリーズする (すべての JFrame ウィンドウで何もできない) ことに気付きました。これは通常Javamailの場合ですか、それとも他のJFrameを引き続き機能させる方法はありますか?
私のプログラムでは、1通のメールを送信するのに約10秒かかります。
車の管理システムのプログラムを開発しています。次に、車の入退去時にこの会社のオーナーにメールを送信したいと思います。私のコードはメールを正常に送信できますが、メールの送信中に、メールの送信が完了するまで他の JFrame ウィンドウがフリーズする (すべての JFrame ウィンドウで何もできない) ことに気付きました。これは通常Javamailの場合ですか、それとも他のJFrameを引き続き機能させる方法はありますか?
私のプログラムでは、1通のメールを送信するのに約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);
}
}