【发布时间】:2016-03-11 18:51:21
【问题描述】:
我正在学习 Herbert Schidlt 的“The Complete Reference”中的 Java。 在本书中,建议如果您的 GUI 的任何部分需要做一些可能需要更长的事件生成时间的事情,那么我们应该将该事情作为一个新线程来实现。
所以,我制作了一个 GUI 来将邮件发送到我的收件箱,它工作正常,但发送邮件需要 2-3 秒,因此发送按钮也需要时间恢复到正常状态(它一直按下直到侦听器响应,因为在侦听器中,我已经实现了发送邮件的代码。
为了避免这种情况,我试图在这个“发送”按钮上运行一个线程,这样当按下按钮时,将生成一个 mouseEvent,并且在那个 mouseEvent 上,我想运行这个线程以便监听器立即回复并通过线程发送邮件。
我如何实施这个方案?我尝试在 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 方法?请指教。
【问题讨论】:
-
线程 t = 新线程(可运行); t.start();
-
@rkosegi 我到底在哪里写这个声明?
标签: java multithreading