[英]Threads in GUI (Swing) - application unfreeze
我对Java Swing应用程序中的线程有疑问。 我的应用程序中有一个模块可以接收和发送电子邮件。 我想将一个操作分配给Button(mouseClicked),以接收未读的电子邮件。
伪代码:
ExchangeConnector ec = new ExchangeConnector();
ArrayList<Mail> unreadMails = ec.receive(Mail.UNREAD);
// (...)
ec.close();
我当前的实现使应用程序冻结,直到接收完成(有时可能需要10分钟以上)。
问题是-如何使其完全在“后台”运行,使我的应用程序可用于其他操作?
JohanSjöberg给出了提示:将长期运行的任务放入线程中。 我还想补充一点:不要启动不同的线程(除非您确实需要这样做),而应该使用一个专用的工作线程进行此类操作。 否则,您会迷失于线程的必杀技。 监视两个线程(事件分发线程和工作线程)要简单得多。
与其阻塞Swing线程,不如创建一个新线程来为您执行接收。 例如,
new Thread(new EmailReceiver(new ExchangeConnector())).start();
还有EmailReceiver
public class EmailReceiver implements Runnable {
private ExchangeConnnector ec;
public EmailReceiver(ExchangeConnector ec) {
this.ec = ec;
}
@Override
public void run() {
ec.receive(Mail.UNREAD);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.