繁体   English   中英

GUI中的线程(Swing)-应用程序解冻

[英]Threads in GUI (Swing) - application unfreeze

我对Java Swing应用程序中的线程有疑问。 我的应用程序中有一个模块可以接收和发送电子邮件。 我想将一个操作分配给Button(mouseClicked),以接收未读的电子邮件。

伪代码:

ExchangeConnector ec = new ExchangeConnector();
ArrayList<Mail> unreadMails = ec.receive(Mail.UNREAD);
// (...)
ec.close();

我当前的实现使应用程序冻结,直到接收完成(有时可能需要10分钟以上)。

问题是-如何使其完全在“后台”运行,使我的应用程序可用于其他操作?

看看SwingWorker是如何在Swing线程中执行此类操作的。

SwingWorker是:

在用户交互事件之后必须执行耗时的任务时很有用

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM