2014-02-06 17 views
5

Ich versuche in meinem Projekt Thread zu verwenden, um E-Mails zu senden. Wenn ich auf eine Button klicke, wird eine Thread gestartet und eine ProgressBar wird angezeigt. Sobald alle Mails gesendet wurden, verschwindet die ProgressBar nicht.Verwenden von Thread mit Vaadin?

Dies ist mein 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("[email protected]"); 
    list.add("[email protected]"); 
    list.add("[email protected]"); 

    new Thread(){ 
     public void run(){ 
      while(!isInterrupt()){ 
       progressbar.setVisible(true); 
       for(String send : list){ 
        new SendMailClass(send); //javamail class 
       }   
       progressbar.setVisible(false); 
       interrupt(); 
    } 
}.start(); 


} 

Wie kann ich die Sichtbarkeit des ProgressBar von einem getrennt Thread kontrollieren?

+1

Denken Sie daran, ist Vaadin grundsätzlich GWT Dies ist Teil Java-Code auf Ihrem Server und Teil JavaScript in Ihrem Browser ausgeführt wird. Der Code, den Sie geschrieben haben, ist zwar vollständig gültig (syntaktisch), kompiliert jedoch nicht auf JavaScript, das in Ihrem Browser ausgeführt werden kann. Können Sie den Code veröffentlichen, in dem Sie die Fortschrittsanzeige erstellen? –

Antwort

7

Um UI-Elemente von einem Hintergrundthread zu aktualisieren, müssen Sie entweder Push oder Polling aktivieren, .

Die Dokumentation finden Sie im Vaadin-Buch.

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

Neben der Aktivierung Push, müssen Sie auch Zugriff auf die UI-Elemente synchronisieren , wie im Abschnitt „11.16.3. Zugriff auf UI von einem anderen Thread“

+0

wow Kumpel, danke ... jetzt funktioniert. Ich habe @Push in meiner Benutzeroberfläche aktiviert und push() in den manuellen Modus UI.getCurrent() .push() verwendet und funktioniert! : D ..So netter Mann, Felsen. Danke noch einmal ! – FernandoPaiva

+0

jetzt mein Thread diesen Fehler zurückgegeben: "Ausnahme im Thread" Thread-15 "java.lang.IllegalStateException: Ein Connector sollte nicht als schmutzig markiert werden, während eine Antwort geschrieben wird." ... Irgendeine Idee ? – FernandoPaiva

+0

Wie hast du es gelöst? (Es könnte für andere interessant sein, die auf das gleiche Problem stoßen) –