A felületi elem eszközkészlet kezelésekor meg kell érteni a platform GUI események olvasásához és elindításához használt alapul szolgáló szálmodellt. Az UI szál megvalósítása hatással van az alkalmazások által követendő szabályokra, ha Java szálakat használnak a kódban.
A GUI alkalmazás alatt - a nyelvtől és UI eszközkészlettől függetlenül - az operációs rendszer platform felismeri a GUI eseményeket és berakja őket az alkalmazás-eseménysorokba. A különböző operációs rendszer platformokon használt eljárások kissé különböznek, de az alapok hasonlóak. Ha a felhasználó kattint az egérrel, karaktereket gépel vagy ablakokat nyit meg, akkor az OS alkalmazás GUI eseményeket állít elő, mint például az egérkattintás, billentyűleütések vagy ablakkifestési események. Ez meghatározza, hogy mely ablaknak és alkalmazásnak kell megkapnia az eseményeket, és elhelyezi őket az alkalmazás eseménysoraiba.
Az ablakos GUI alkalmazás alapul szolgáló struktúrája egy eseményciklus. Az alkalmazások inicializálják, majd elindítják a ciklust, amely egyszerűen kiolvassa a GUI eseményeket a sorból és ennek megfelelően reagál. Az események kezelése során végzett munkának gyorsan kell végrehajtani annak érdekében, hogy a GUI rendszer válaszképes maradjon a felhasználó felé.
Az UI események által aktivált hosszú műveleteket külön szálban kell végrehajtani annak érdekében, hogy az eseményciklus-szál gyorsan visszatérhessen és lehívhassa az alkalmazássor következő eseményét. A vezérlőelemek és a platform API más szálakból elérését explicit zárolással és sorozatképzéssel szabályozni kell. A szabályokat nem követő alkalmazás hatására az operációs rendszer hívás meghiúsulhat, vagy esetleg zárolhatja a teljes GUI rendszert.
Az SWT közvetlenül a platformok által támogatott szálkezelési modellt követi. Az alkalmazásprogram az eseményciklust a fő szálban futtatja, és az eseményeket közvetlenül ebből a szálból indítja el. Az UI az a szál, amelyben a Megjelenítő létrehozásra került. A többi felületi elemet az UI szálban kell létrehozni.
Mivel minden eseménykódot az alkalmazás UI szálja aktivál, az eseményeket kezelő alkalmazáskód szabadon hozzáférhet a vezérlőelemekhez és grafikus hívásokat kezdeményezhet speciális technikák nélkül. Hosszú műveletek futtatásakor az alkalmazás felelős a feldolgozási szálak elágazásáért egy eseményre válaszul.
Megjegyzés: Az SWT egy SWTException kivételt aktivál azon nem UI szálból kiadott hívásokhoz, amelyeket UI szálból kell kiadni.
Az SWT alkalmazás fő szála - az eseményciklust is beleértve - az alábbi struktúrával rendelkezik:
public static void main (String [] args) { Display display = new Display (); Shell shell = new Shell (display); shell.open (); // az eseményciklus elindítása. Akkor kerül leállításra, // ha valami eltávolítja az ablakot. while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } display.dispose (); }
A felületi elemek létrehozása és a parancsértelmező megnyitása után az alkalmazás kiolvassa és elindítja az eseményeket az operációs rendszer sorból a parancsértelmező ablak bezárásáig. Ha a sorban nem állnak rendelkezésre események, akkor utasítjuk a megjelenítőt, hogy alvó állapotba kerüljön, így más alkalmazások is futhatnak.
Az SWT speciális hozzáférési metódusokat biztosít a felületi elemek és grafikus kód háttérszálból meghívásához.
Az alkalmazásoknak, amelyek az UI kódot nem UI szálból kívánják meghívni, biztosítaniuk kell az UI kódot meghívó futtatható fájlt. A Display osztályban lévő syncExec(Runnable) és asyncExec(Runnable) metódus az UI szálban az eseményciklus során végrehajtja ezeket a futtatható fájlokat.
Az alábbi kódrészlet bemutatja a metódusok használatának mintáját:
// időigényes feldolgozások ... // UI frissítése. Nem függ az eredménytől, // így használható aszinkron módon. display.asyncExec (new Runnable () { public void run () { if (!myWindow.isDisposed()) myWindow.redraw (); } }); // itt történhet a további feldolgozás ...
Érdemes ellenőrizni, hogy a felületi elem megszüntetésre került-e a
futtatható fájlban az asyncExec alkalmazásakor. Mivel az asyncExec
hívása és a
futtatható fájl végrehajtása között az UI szálban más esemény is
történhet, sosem lehet benne biztos, hogy a futtatható fájl
végrehajtásakor a felületi elemek milyen állapotban vannak.
A szálkezelési szabályok üresek, ha az SWT alkalmazást a nulláról valósítja meg, mivel szabályozhatja az eseményciklus létrehozását és dönthet az alkalmazás feldolgozási szálainak elágazásáról.
A bedolgozókód munkaterületen közreadásakor a dolgok kicsit bonyolultabbá válnak. Az alábbi szabályok a "munkavégzés szabályainak" tekinthetők annak ellenére, hogy kiadásról-kiadásra lehetnek a szabályok alól kivételek: