java使用线程和Vaadin?
我正试图在我的项目中使用Thread
来发送电子邮件。当我点击一个Button
时,一个Thread
被启动并显示一个ProgressBar
。所有邮件一发出,ProgressBar
就不会消失
这是我的代码:
Button btnSendMail = new Button("Mail");
btnSendMail.addClickListener(this);
@Override
public void buttonClick(ClickEvent event) {
if(event.getButton() == btnSendMail){
sendMail();
}
}
}
private void sendMail(){
List<String> list = new ArrayList<String>();
list.add("mymail@domain.com");
list.add("metoyou@domain.com");
list.add("thisismymail@domain.com");
new Thread(){
public void run(){
while(!isInterrupt()){
progressbar.setVisible(true);
for(String send : list){
new SendMailClass(send); //javamail class
}
progressbar.setVisible(false);
interrupt();
}
}.start();
}
我如何控制ProgressBar
与独立Thread
的可见性
# 1 楼答案
要从后台线程更新UI元素, 你必须激活推送或轮询
这些文件可以在瓦丁的书中找到
https://vaadin.com/de/book/vaadin7/-/page/advanced.push.html
除了启用推送,还需要同步对UI元素的访问 如“11.16.3.从另一个线程访问UI”一节所述