Hallo,

ich spiele gerade ein bisschen mit QTJambi rum und versuche mich an einem kleinen Jabberclient. Dafür verwende ich zusätzlich die Jabber-Bibliothek Smack (http://jivesoft.org/smack).
In meiner Rosterklasse benötige ich einen RosterListener, der eben auf verschiedene Ereignisse reagiert. Nun will ich aber bei einem auftretenden Event nicht nur mit "System.out.println()" reagieren sondern gerne meine GUI darauf reagieren lassen. Leider kann ich aber innerhalb der inneren RosterListener-Klasse nicht auf die GUI-Elemente der umgebenden Klasse zugreifen ("Cannot refer to a non-final variable tree inside an inner class defined in a different method"). Die Variable tree "final" zu deklarieren hilft leider auch nicht weiter.
Hier mal der code: (Problem tritt in der presenceChanged-Methode auf)

Code:
public class JJabRoster extends QObject
{
	private LinkedList<RosterGroup> groups;
	private QTreeWidget tree;
	private XMPPConnection con;
	private Roster roster;
	private boolean hideEmptyGroups;
	private boolean hideOfflineContacts;
	
	public JJabRoster(XMPPConnection con, QTreeWidget tree, boolean hideEmptyGroups, boolean hideOfflineContacts)
	{
		this.tree = tree;
		this.con = con;
		this.roster = con.getRoster();
		this.roster.addRosterListener(new RosterListener() {
			
			public void rosterModified(Collection addresses) 
			{
				System.out.println("roster modified: "+addresses.toString());
			}

			public void presenceChanged(String user) 
			{
				QTreeWidgetItem parent = new QTreeWidgetItem(tree);
				parent.setText(0, user);
				System.out.println("presenceChanged: "+user+" (" );
			}	
			    
			public void entriesUpdated(Collection addresses)
			{
				System.out.println("entries updated: "+addresses.toString());
			}
			    
			public void entriesDeleted(Collection addresses)
			{
			    System.out.println("entries deleted: "+addresses.toString());
			}
			    
			public void entriesAdded(Collection addresses)
			{
				System.out.println("entries added: "+addresses.toString());
			}
		}); 
}