Пытаюсь написать программу отправки сообщений на e-mail адрес с использованием swing NetBeans. В принципе все работает, проблема заключается в следующем:
Есть список адресатов в таблице, всем им нужно отправить одинаковое сообщение из jTextArea и тем кому отправлено поставить в таблице статус "Отправлено" и заполнить jProgressBar в реальном времени. Отправка происходит по нажатию на кнопку. Если написать эти действия последовательно, то интерфейс виснет до окончания цикла отправки. Пробовал этот цикл вынести в отдельный поток, результат тот же. Как быть?
Вот код:
List<String> sendMail = new ArrayList<>();
for (int i=0;i<jTable1.getRowCount();i++){
if ((Boolean)jTable1.getValueAt(i, 0)) sendMail.add((String)jTable1.getValueAt(i, 1));
}
String subject = jTextField1.getText();
String msg = jTextArea2.getText();
jProgressBar1.setMinimum(0);
jProgressBar1.setMaximum(sendMail.size());
jProgressBar1.setValue(0);
Properties props = new Properties();
props.setProperty("mail.smtp.host", "smtp.yandex.ru");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.port", "465");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("user", "user");
props.setProperty("pwd", "*****");
int i =0;
SendUtils sm = new SendUtils(props);
for (String mail:sendMail){
try{
sm.send(mail, subject, msg);
jTable1.setValueAt(new ImageIcon("ok.png"), i, 2);
}catch(MessagingException e){
jTable1.setValueAt(new ImageIcon("no.png"), i, 2);
}
jProgressBar1.setValue(++i);
}
А вот в отдельном потоке:
new Thread(new Runnable() {
@Override
public void run() {
List<String> sendMail = new ArrayList<>();
for (int i=0;i<jTable1.getRowCount();i++){
if ((Boolean)jTable1.getValueAt(i, 0)) sendMail.add((String)jTable1.getValueAt(i, 1));
}
String subject = jTextField1.getText();
String msg = jTextArea2.getText();
jProgressBar1.setMinimum(0);
jProgressBar1.setMaximum(sendMail.size());
jProgressBar1.setValue(0);
Properties props = new Properties();
props.setProperty("mail.smtp.host", "smtp.yandex.ru");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.port", "465");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("user", "support@rodina.tv");
props.setProperty("pwd", "iNg9quup");
int i =0;
SendUtils sm = new SendUtils(props);
for (String mail:sendMail){
try{
sm.send(mail, subject, msg);
jTable1.setValueAt(new ImageIcon("ok.png"), i, 2);
}catch(MessagingException e){
jTable1.setValueAt(new ImageIcon("no.png"), i, 2);
}
jProgressBar1.setValue(++i);
}
}
}).run();