使用线程与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”一节中所述