Na obslúženie myšacích udalostí a udalosti stlačenia klávesov využíva JPAZ2 framework mechanizmus prekrytia onMouseXYZ
a onKeyXYZ
metód triedy Pane
. Z dôvodu efektívnosti však JPAZ2 je implementovaný tak, že všetky vizuálne zmeny zrealizované v týchto metódach sa prejavia až po ich skončení. Zároveň v tomto čase je zablokované akékoľvek spracovávanie používateľských akcií (myšacie udalosti, klávesnica). To má za následok to, že ak chceme na základe kliknutia myšou spustiť napríklad nejakú pomalú animáciu, alebo inú dlhotrvajúcu akciu, výsledok sa prejaví až po jej skončení. A to nie je v istých prípadoch žiadúce. Ako teda na to ?
Predpokladajme, že v triede MojaPlocha
oddedenej od triedy WinPane
máme metódu akcia
, ktorú chceme spustiť pri kliknutí myšou.
V tomto príklade je dlhotrvajúca akcia spustená v súbežne bežiacom vlákne. JPAZ2 je naprogramovaný tak, že nemá problém s vykonávaním akcií z viacerých vlákien (je thread-safety). To však môže neplatiť pre vami vytvorené triedy. Preto treba byť veľmi opatrný a napríklad na animácie radšej využiť prekrytie onTick
metódy, ktorá sa vykonáva so zadanou frekvenciou (periódou).
Vyššie uvedený príklad využíva 2 pokročilé koncepty, ktoré nie sú zahrnuté v obsahu PAZ1a:
To, že akékoľvek obslužné metódy musia čo najskôr ukončiť svoju činnosť a na dlhotrvajúce veci sa používajú vlákna, platí (asi) v každom GUI frameworku (Delphi, C#, Java - AWT/Swing, ...).