问题
I'm trying to use Thread
in my project to send emails. When I click on a Button
, a Thread
is started and a ProgressBar
is displayed. As soon as all mails are sent, the ProgressBar
doesn't disappear.
This is my code:
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();
}
How can I control visibility of the ProgressBar
from a separated Thread
?
回答1:
To update UI elements from a background thread, you have to activate either push or polling.
The documentation can be found in the vaadin book.
https://vaadin.com/de/book/vaadin7/-/page/advanced.push.html
In addition to enabling push, you also need to synchronize access to the UI elements as described in section "11.16.3. Accessing UI from Another Thread"
来源:https://stackoverflow.com/questions/21603492/using-thread-with-vaadin