# SwingWorker - ich werde wahnsinnig



## Sladda (10. Feb 2008)

Hi all!

Ich probiere nun schon stundenlang und es geht nichts, mir hilft auch kein Tutorial und nix... :

Meine Klasse GUI hat eine actionperformed Methode, in der, nach einem Buttonclick, viele Emails versendet werden sollen und nach jeder versendeten Email soll ein label z.B. "5 / xxx Mails versendet" anzeigen.
Nachdem mir die EDT-Problematik bewusst geworden ist, habe ichs mit einem Swingworker versucht, leider wird das Label immer noch nicht nach jedem Versenden aktualisiert, sondern nur ganz am schluss...

Meine GUI-Klasse:   //sehr verkürzt

```
public class GUI extends JFrame{
...
...
public void actionPerformed(ActionEvent e) {
    
    if(e.getSource()==this.buttonSend){
        
        for (int i=0; i<anzahlEmails; i++){
            MySwingWorker worker = new MySwingWorker(i,this.lblSendStatus);
            worker.execute();
        }
    }
}

...
...
...
}
```

Und meine SwingWorker-Klasse dazu:

```
public class MySwingWorker extends SwingWorker<Integer, Void>{

	private int ind;
	private JLabel label;
	
	public MySwingWorker(int i, JLabel label){
		super();
		this.ind = i;
		this.label = label;
	}
	
	@Override
	protected Integer doInBackground() throws Exception {
	    //WORK TO DO - Hier: eine Emailsenden, dauert halt "relativ" lange
	    return this.ind;
	}

	    
	@Override 
	protected void done(){            //try-catch wegen der get() Methode
                    try{
	       this.label.setText("Email "+get()+" / xxx versendet."); 
                    }
                    catch(Exception e){//nix}
                } 


}
```

Hat vielleicht jemand eine Idee warum mein Label nicht aktualisiert wird? 
Was ist falsch?

Vielen Dank!!!


----------



## JBenutzername (10. Feb 2008)

edit


----------



## Sladda (10. Feb 2008)

JBenutzername hat gesagt.:
			
		

> edit


hm, was willst du mir damit sagen?  :roll: 

Hat noch jemand anders eine "Idee" ?


----------



## Marco13 (11. Feb 2008)

Kannst Daten mit der "publish"-Methode vom Worker Thread an die "process"-methode übergeben, die im EventDispatchThread ausfgeführt wird. Schau mal hier
http://java.sun.com/docs/books/tutorial/uiswing/concurrency/interim.html
und ggf. natürlich hier
http://java.sun.com/javase/6/docs/api/javax/swing/SwingWorker.html#publish(V...)

Wenn noch Fragen sind, sag bescheid...


----------



## Sladda (11. Feb 2008)

jaaaaa, so gehts! Danke 

Falls ich noch Fragen hab, meld ich mich aber trotzdem nochmal ;-)

Vielen Dank Marco


----------

