Thread(s) in SWT Applikation - planlos....

@zeja:
Vielen Dank für Deine SUPERSCHNELLE Hilfe. Werde die Hinweise von Dir berücksichtigen und entsprechend die Klassen mal umstellen. Auf die Idee mit dem Composite hätte ich auch selber kommen können - ist sauberer.

habe deinen Code jetzt so grob nicht zum kompilieren bekommen, kann es aber ja so oder so nicht testen.
Hab ne Menge externer Libs eingebunden (SWT, javax.comm, CommonConfigurations,...)


Da du das ganze mit javax.comm über Listener machst, brauchst du gar keinen Thread. Du musst nur in deiner Klasse Transpondern noch Methoden wie addTransponderListener(TransponderListener) und removeTransondernListener(TransonderListener) hinzufügen. Aus LoginDialog rufst du dann transponder.addTransponderListener(this) auf.

Das interface TransponderLister extends EventListener muss dann eine Methode wie gotKey(TransponderEvent) anbieten. Diese implementiert du in der LoginDialog Klasse und in der Klasse Transponder rufst du diese Methode der registrierten Listener auf sobald du den richtigen Key ausgelesen hast.

Im LoginDialog setzt du dann das Ergebnis und disposed die Sehll des Dialogs. Dadurch wird der Dialog beendet und das Ergebnis zurückgegeben.
Dies kann ich noch nicht ganz nachvollziehen...
 
Also nochaml anders:
Neue Klassen
Java:
public interface TransponderListener extends EventListener{
public gotKey(TransponderEvent event);
}
Java:
public class TransponderEvent extends EventObject{
... Sachen die du so brauchst vom Transponder
}

In der Klasse Transponder:
Java:
List<TransponderListener> transponderListenerList = new ArrayList<TransponderListener>();
public void addTransponderListener(TransponderListener listener){
transponderListenerList.add(listener);
}
public void removeTransponderListener(TransponderListener listener){
transponderListenerList.remove(listener);
}
//Die hier aufrufen wenn key von transponder gelesen wurde
private void notifyTransponderListener(TransponderEvent event){
for(TransponderListener listener : transponderListenerList){
listener.gotKey(event);
}
}

Im LoginDialog implements TransponderListener
Java:
Transponder trans = new Transponder();
trans.addTransponderListener(this);

public void gotKey(TransponderEvent event){
result = ....
shell.dispose();
}

nicht ganz so schick, weil mal eben ausm Kopf hingeschrieben.
 
OK Danke für den Anstoß, werde das mal durcharbeiten.....


EDIT:
Vielen Dank für die Hilfe...Nun klappts.
 
Zuletzt bearbeitet:
Zurück