2013-07-13 42 views
2

我開發汽車管理系統的程序。然後,我想在汽車進來並開車時向該公司的所有者發送郵件。 我的代碼可以成功發送郵件,但我注意到,在發送郵件時,其他JFrame窗口凍結(我無法對所有JFrame窗口執行任何操作)直到郵件發送完成。 這是通常的Javamail或有辦法讓其他JFrame仍然工作?所有JFrame凍結的同時做JavaMail

在我的程序中,大約需要10秒鐘才能完成發送一封郵件。

+0

你必須使用另一個線程 – nachokk

+0

你需要發送只有一個e-mail或多少?如果您需要發送一些電子郵件,您可能應該顯示一些進度條或電子郵件的結果。 – Thorn

回答

6

當你執行繁重的任務時,你應該在另一個線程中運行它們,而不是像gui一樣。如果你運行在Event Dispatch Thread那麼gui會凍結,直到完成。

你可以在這裏使用SwingWorker是一個例子,我真的很喜歡Swing Worker Example

例子:

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); 
    } 
} 
+0

+1好(編輯&)答案。 –

+0

謝謝!我也用你提供的鏈接閱讀你的代碼,它的工作。 – user2549814