gpt4 book ai didi

java - 将 JProgressBar 与 Java Mail 结合使用(了解 Transport.send() 之后的进度)

转载 作者:行者123 更新时间:2023-12-02 08:13:53 26 4
gpt4 key购买 nike

我有一个发送电子邮件的程序。我想知道是否可以使用进度条来使用户界面更好。我想要的是进度条应该在遇到语句 transport.send() 后相应地前进。有没有办法我可以知道进度。所发生的情况是,当用户按下发送时,会启动一个发送电子邮件的新线程。单击发送后的响应很差,因为用户不知道他的操作是否正在被监听。< em>(尽管正在监听!)半分钟后,他得到一个 JOptionPane ,是的,消息已发送。您会同意每个人都渴望知道他的操作是否正在处理。

有什么办法可以使用进度条。(即我如何知道我的电子邮件程序的进度)如果我不能使用 JProgressBar 我可以使用什么其他方法来告诉用户他的命令正在处理,他不必担心。

顺便说一句,这是负责发送电子邮件的部分。

try {
message.setFrom( new InternetAddress(from));
message.setRecipients(MimeMessage.RecipientType.TO , InternetAddress.parse(to) );
message.setSubject(subject);
message.setText(emailMessage);
attachment.setDataHandler( new DataHandler( fds ) );
attachment.setFileName( fileName );
messagePart.setText( emailMessage );
Multipart gmailMP = new MimeMultipart();
gmailMP.addBodyPart(attachment);
gmailMP.addBodyPart( messagePart );
message.setContent( gmailMP );
Transport transport = session.getTransport("smtp");
transport.send(message); // LINE THAT SENDS EMAIL
transport.close();

JOptionPane.showMessageDialog(new JFrame() , "Message sent!");
} catch(Exception exc) {
JOptionPane.showMessageDialog( new JFrame() , exc );
}

在注释行之后,执行接下来的 2 个语句需要一些时间。在这之间,我希望用户知道他的操作正在被处理

我怎样才能做到这一点?

最佳答案

如果我理解您的问题正确,您希望了解电子邮件发送过程的最新信息。在这种情况下,您可以以进度条的形式向用户显示此信息。

据我所知,您在这里没有“明确”的解决方案。尽管javax.mail.Transport 具有方法addTransportListener(TransportListener l),但接口(interface)TransportListener 并不报告已完成工作的百分比是多少。坦白说,我不确定这是否可能。您可以做的是在流程开始和结束时得到回调。您可以向程序添加一个逻辑,该逻辑“了解”发送电子邮件通常需要多长时间,然后尝试使用计时器任务“模拟”进度。例如,如果通常需要 30 秒,则每 1 秒向进度条添加 3%。然后停止,除非电子邮件发送完成。如果发送完成更快,则立即跳至 100%。您的程序可以自行调整和更新,如果网络变得更快,它会将时间估计为 20 秒而不是 30 秒等。

我认为不存在更好的解决方案。不用担心:世界上大多数流程栏都是基于某种估计、启发法等。

关于java - 将 JProgressBar 与 Java Mail 结合使用(了解 Transport.send() 之后的进度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6818972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com