Concurrency in Swing

Hasonló dokumentumok
Programozási technológia 2.

Programozási nyelvek és módszerek Java Thread-ek

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Java Programozás 3. Gy: Java GUI. Swing, AWT

Szoftvertechnológia alapjai Java előadások

S ha kettészelik is: balfelöl belőle Valamivel mindig - Valamivel mindiq több marad. (Nyugat )

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Task-alapú párhuzamosítás C# környezetben

Programozási technológia 2.

Konkurens TCP Szerver

Párhuzamosság. Java a párhuzamosítást több féle képpen támogatja.

Programozási technológia

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Programozási nyelvek Java

Végrehajtási szálak - kiegészítések. Szinkronizálás, érvénytelenített metódusok helyettesítése

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

Programozási technológia

Java Programozás 11. Ea: MVC modell

Programozási nyelvek Java

Eseményvezérelt alkalmazások fejlesztése II 5. előadás. Windows Forms alkalmazások párhuzamosítása. Giachetta Roberto

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Segédanyag: Java alkalmazások gyakorlat

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

Abstract osztályok és interface-ek. 7-dik gyakorlat

Java programozási nyelv 9. rész Kivételkezelés

PROBLÉMAFELVETÉS. Programozás III. Mit csinál? SZÁLAK + MULTIMÉDIA

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Szálkezelés Rajzolás képernyőre Bevitel kezelése - Érintő képernyő - Billentyűzet

Swing GUI készítése NetBeans IDE segítségével

Szálkezelés Rajzolás képernyőre Bevitel kezelése - Érintő képernyő - Billentyűzet

Operációs rendszerek. Az Executive és a kernel Policy és mechanizmusok szeparálása Executive: policy - objektum kezelés Kernel: mechanizmusok:

és az instanceof operátor

OOP: Java 8.Gy: Abstract osztályok, interfészek

Programozási nyelvek Java

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

Osztályok. 4. gyakorlat

OOP és UML Áttekintés

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Segédanyag: Java alkalmazások gyakorlat

Java programozási nyelv 5. rész Osztályok III.

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

A legalacsonyabb szintű tesztelés. A programot felépítő egységek tesztelése Unit: egy rendszer legkisebb önálló egységként tesztlehető része.

Virtuális függvények (late binding)

7. K: JAVA alapok Konzultáció

OOP: Java 8.Gy: Gyakorlás

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

Programozás C++ -ban 2007/7

C++ programozási nyelv

BME MOGI Gépészeti informatika 8.

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Már megismert fogalmak áttekintése

Eseménykezelés. Aszinkron kommunikáció

Interfészek. PPT 2007/2008 tavasz.

ISA szimulátor objektum-orientált modell (C++)

Operációs rendszerek. Az NT folyamatok kezelése

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Programozás II. ATM példa Dr. Iványi Péter

Java felhasználói felület

Java IX. telkezelés a Java-ban

BME MOGI Gépészeti informatika 7.

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Java IX. telkezelés a Java-ban

Broadcast Service Widget

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Szoftvertechnolo gia gyakorlat

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Eseményvezérelt alkalmazások fejlesztése II 5. előadás. Windows Forms alkalmazások párhuzamosítása. Cserép Máté

Bevezetés a programozásba előadás: Öröklődés

JAVA PROGRAMOZÁS 3.ELŐADÁS

Sikeres végrehajtás(pass): ez azt jelenti, hogy a teszt rendben lefutott, és az ellenőrzési feltételek mind teljesültek.

Java Programozás 7. Gy: Java alapok. Adatkezelő 3.rész

JAVA PROGRAMOZÁS 2.ELŐADÁS

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Java és web programozás

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész

Web-technológia PHP-vel

Objektumorientált programozás C# nyelven

Algoritmusok és adatszerkezetek II.

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Java felhasználói felület

Objektumorientált programozás C# nyelven III.

OOP. Alapelvek Elek Tibor

C++ programozási nyelv

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

SZOFTVERFEJLESZTÉS ANDROID PLATFORMRA. Dr. Iszály György Barna

Programozás II gyakorlat. 4. Öröklődés

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés. Készítette: Gregorics Tibor

Programozás II gyakorlat. 6. Polimorfizmus

C# osztályok. Krizsán Zoltán

JAVA SE/ME tanfolyam tematika

Átírás:

Concurrency in Swing

A szálkezelés a swing alkalmazásokban is fontos. Cél egy olyan felhasználói felület készítése, amely soha nem fagy, mindig válaszol a felhasználói interakciókra, bármit is csináljon éppen. Swing 3 féle szállal dolgozik: Kezdeti szálak (initail Threads): az alkalmazást futtató kezdeti szálal. Event dispatch thread: ahol minden eseménykezelő kód és minden swing-el kapcsolatos interakció fut. Háttér szálak (worker - threads): időigényes műveletek háttérben futtatására. A szálakat nem szükséges explicit létrehozni, ezeket a Swing kezeli helyettünk.

Initial Threads Minden alkalmazáshoz tartozik néhány szál, ahonnan az alkalmazás elindul. Általában ez a main thread. Swing alkalmazásokban a kezdeti szál nem végez lát el sok feladatot. A legfontosabb feladatai egy Runnable objektum létrehozása, amely inicializálja a GUI-t A Runnable objektum ütemezése az event dispatch thread-re. A GUI elindítása után az alkalmazást többnyire az interfész eseményei vezérlik. Az események rövid taskok végrehajtását váltják ki az EDT-en.

Az alkalmazás egyéb taskokat is tud az EDT-re vagy háttér szálra ütemezni. A kezdeti szálak a GUI létrehozásának ütemezése SwingUtilites.invokeLater: Ütemezi a taskot és visszatér SwingUtilities.invokeAndWait: Ütemezi a taskot és megvárja, hogy befejődjön. Általában a GUI létrehozás ütemezése az utolsó dolog, amit a main szál végez. Minden Swing componenst használó kódnak az EDT-en kell futnia! SwingUtilities.invokeLater(new Runnable() { public void run() { createandshowgui(); );

Event Dispatch Thread (EDT) A swing esemény kezelő kódja egy speciális szálon fut. A swing compnenseket használó, létrehozó kód is ezen a szálon fut. Ez szükséges, mert a legtöbb swing objektum nem szálbiztos. Ezeket figyelmen kívül hagyvan előre nem látható, nehezen kezelhető hibákba ütközhetünk Az EDT rövid taskok sorozataként fut: A legtöbb, az eseménykezelő metódusok hívása, mint az actionperformed Egyéb: az alkalmazás által ütemezett taskok, az invokelater és invokeandwait metódusok használatával. Az EDT taskokknak rövidnek kell lennie. SwingUtilities.isEventDispatchThread.

Worker Threads SwingWorker Swing alkalmazásból hosszú futásidejű feladatok végrehajtására használható szálak. Minden task egy SwingWorker példányként reprezentált. Ez egy absztrakt osztály, ennek egy leszármazottját kell definiálni. SwingWorker a java SE 6 óta.

SwingWorker Kommunikációs mechanizmusai done metódus definiálható a SwingWorker implementációban, a háttér task lefutása után kerül meghívásra, autómatikusan az EDT-n. A SwingWorker implementálja a Future interfészt így a háttértask adhat vissza értéket. Az interfész lehetővé teszi még a task leállítását (cancel) és a task állapotának lekérdezését (befejezedőött, leállított). A háttér szál elérhetővé tud tenni részeredményeket a futás befejeződése előtt a publish metódus hívásával. A részeredményeket a process metódus dolgozza fel, amely autómatikusan az EDT-n fut.

SwingWorker worker = new SwingWorker<ImageIcon[], Void>() { public ImageIcon[] doinbackground() { final ImageIcon[] innerimgs = new ImageIcon[nimgs]; for (int i = 0; i < nimgs; i++) { innerimgs[i] = loadimage(i+1); return innerimgs; ; public void done() {. try { imgs = get(); //vagy get(1000); catch (InterruptedException ignore) { catch (java.util.concurrent.executionexception e) {...

private class FlipTask extends SwingWorker<Void, Integer> { protected Void doinbackground() { Random random = new Random(); while (!iscancelled()) { publish(random.nextint(1000)); return null; protected void process(list<integer> r) {...

Háttér task-nak támogatni kell a megszakítását, ez két módon lehetséges: Bejezés interrupt hatására (ahogy a szálaknál), isinterrupted.. iscancelled() metódus hívása periódikusan. True-t ad vissza, ha a worker cancel metódusát meghívátk.

Swing Timer Egy vagy több Action eventet generál a megadott idő után. Az általános timer-el ellentétben, ez a GUI-val kapcsolatos időzítéses feladatok elvégzésére való. Előre létrehozott időzító szálat használ. A GUI taskok autómatikusan az EDT-n hajtódnak végre. Felhasználási módok: Task végrehajtása egyszer, késleltetés után Ismétlődő feladatok végrehajtása.

Használata A timer létrehozásakor meg kell adni egy actionlistener-t amely lefut a megadott időben. A létrehozáskor meg kell adni a végrehajtások közötti várakozási időt. setrepeats(false) hívással megadható, hogy a timer ne ismétlődjön. Start metódus indítja a timer-t Stop-al megállítható.