我对Java Swing Application中的线程有疑问。我的应用程序中有一个模块,用于接收和发送电子邮件。我想为Button(mouseClicked)分配一个动作来接收未读的电子邮件。
伪代码:
ExchangeConnector ec = new ExchangeConnector();
ArrayList<Mail> unreadMails = ec.receive(Mail.UNREAD);
// (...)
ec.close();
我当前的实现使应用程序冻结,直到接收完成(有时可能需要超过10分钟)。
问题是 - 如何完全“在后台”,使我的应用程序可用于其他操作?
答案 0 :(得分:5)
答案 1 :(得分:2)
答案 2 :(得分:1)
不是阻止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);
}
}