2

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

私のプログラムでは、1通のメールを送信するのに約10秒かかります。

4

1 に答える 1

6

重いタスクを実行するときは、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);
    }
}
于 2013-07-13T04:58:12.483 に答える