OleAutomation und Threads Problem

nopp

Grünschnabel
Hallo zusammen,
ich habe zur Zeit ein Problem mit der OleAutomation in Kombination mit Threads. Habe dazu auch noch keine Erklärung oder anderen Beitrag gefungen.
Ich versuchs mal zu beschreiben:
Zunächst erstelle ich eine OleAutomation einer Clientsite und führe anschliessend dort eine Methode aus.
Code:
private OleAutomation automation;

public void Connect(){
  OleFrame frame = new OleFrame(this, SWT.NONE);
  OleControlSite controlSite = new OleControlSite(frame, SWT.NONE, "XYZ.Document");
  automation = new OleAutomation(controlSite);
}

dann in einer anderen methode aber gleiche klasse
Code:
public void Start(){
  int[] disIDs = automation.getIDsOfNames(new String[] {"Start"});
}

soweit so gut. wenn ich das normal sequenziell abarbeite funktioniert das super.
ABER sobald jetzt ein Thread in Spiel kommt geht das ganze in die Hose.

Ich führe einmal das Connect (insgesamt müssen mehrere sachen verbunden werden) aus und starte anschliessend den thread.dieser pollt eine Schnittstelle, sobald etwas hereinkommt wird ein event ausgelöst und dann die Start() Methode aufgerufen. Das automation wird auch gefunden aber die Methode getIDsOfNames(new String[] {"Start"} liefert nur null zurück!

Eine Sache die mir aufgefallen ist: wenn man Start() folgender maßen umschreibt:
Code:
public void Start(){
  automation = new OleAutomation(controlSite);
  int[] disIDs = automation.getIDsOfNames(new String[] {"Start"});
}
und wieder vom Thread aus startet geht das schon bei der zuweisung schief und man erhält eine NullPointerException vom OLEAutomation Konstruktor zurück. Genauer geht die Zeile
Code:
objIDispatch = clientSite.getAutomationObject();
in der OLEAutomation.class Klasse schief. (getAutomationObject() liefert einfach null)

Ich hoffe das ich mein Problem einiger maßen verständlich gemacht habe, und verbleibe mit der Hoffnung das jemand von euch eine Erklärung oder noch besser eine Lösung hat!

Vielen DANK schon mal im vorraus!
mfg
nopp
 
einmal push

weiß niemand von euch Rat?! oder hab ich mich zu unverständlich ausgedrückt?

es ist für mich wirklich wichtig! Bitte HIIIILLLLFFFEEE!

vlg
nopp
 
Ok, damit du nicht ganz allein edastehest versuchs ich mal.
Sind deine Klassen/Methoden Threadsicher, sprich synchronized?
 
Hallo,

Sind deine Klassen/Methoden Threadsicher, sprich synchronized?
Allein durch synchronized erreicht man noch keine Threadsicherheit... ;-) Da muss man schon ein wenig mehr Aufwand trreiben.
AFIAK musst du das im Thread machen in dem das SWT Display lebt. Also vom anderen Thread aus mit Display.asyncExec(...) ausrufen.

Gruß Tom
 
jaaaaaa vielen vielen DANK!:D

ich habe das ganze etwas umstrukturiert und mit Display.asyncExec(...) hats dann funktioniert

Danke!
nopp
 
Zurück