如何在JButton上运行线程?

时间:2016-03-11 18:51:21

标签: java multithreading

我正在从Herbert Schidlt的“完整参考”中学习java。 在本书中,建议如果GUI的任何部分需要做一些事件生成可能需要更长时间的事情,那么我们应该将该事物实现为新的线程。

所以,我制作了一个GUI来发送邮件到我的收件箱,工作正常,但发送邮件需要2-3秒,因此发送按钮也需要时间才能恢复正常状态(直到监听器回应,因为在监听器中,我已经实现了发送邮件的代码。)

为了避免这种情况,我试图在这个“发送”按钮上运行一个线程,这样当按下Button时,将生成一个mouseEvent,&在那个mouseEvent上,我想运行该线程,以便Listener立即响应并通过线程发送邮件。

如何实施此计划?我尝试在MouseEvent中实现新的Runnable作为内部类,但是我无法弄清楚如何调用start方法!

代码很大,所以我只在这里放置“发送按钮”代码。

sendButton.addMouseListener(new MouseAdapter(){
  public void mouseClicked(MouseEvent me){

    String id=emailIdField.getText();
    String subject=subjectField.getText();
    String body=mailBodyArea.getText();                   
    String user= "emailId@somehost.com";
    String pass="password";
    String host="smtp.gmail.com";
    sendEmail= new SendEmail(); // class which actually sends the mail. defined in other file.
    sendEmail.sendMail( id, user, subject ,body ,host, user, pass ); 
}
});

我想将此MouseClicked函数中的代码作为新线程运行。我到目前为止所尝试的是,

sendButton.addMouseListener(new MouseAdapter(){
  public void mouseClicked(MouseEvent me){

    new Runnable(){

                public void run(){
                   String id=emailIdField.getText();
            String subject=subjectField.getText();
            String body=mailBodyArea.getText();
            System.out.println(id);
            System.out.println(subject);
            System.out.println(body);
            String user= "razr005@gmail.com";
            String pass="impe(*&amit";
            String host="smtp.gmail.com";
            sendEmail= new SendEmail();
            sendEmail.sendMail( id, user, subject ,body ,host, user, pass ); 


                }
            };   
});

但现在我不知道如何调用此线程的start方法?请指教。

1 个答案:

答案 0 :(得分:1)

在mouseCliked函数内添加:

new Thread() {
public void run() {
    String id=emailIdField.getText();
    String subject=subjectField.getText();
    String body=mailBodyArea.getText();
    System.out.println(id);
    System.out.println(subject);
    System.out.println(body);
    String user= "razr005@gmail.com";
    String pass="impe(*&amit";
    String host="smtp.gmail.com";
    sendEmail= new SendEmail();
    sendEmail.sendMail( id, user, subject ,body ,host, user, pass );
}
}.start();