使用线程与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 list = new ArrayList(); 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(); } 

如何从分离的Thread控制ProgressBar可见性?

要从后台线程更新UI元素,您必须激活推送或轮询。

文档可以在vaadin书中找到。

https://vaadin.com/de/book/vaadin7/-/page/advanced.push.html

除了启用push之外,还需要同步对UI元素的访问,如“11.16.3。从另一个线程访问UI”一节中所述