我正在从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方法?请指教。
答案 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();