70 likes | 182 Views
Objektno orijentisano programiranje vežbe – čas 13. Biljana Stojanović. Obrada događaja - NAPOMENE. Sav kod za obradu dogadjaja izvršava se u istoj niti koju možemo nazvati nit za obradu događaja.
E N D
Objektno orijentisano programiranjevežbe – čas 13 Biljana Stojanović
Obrada događaja - NAPOMENE • Sav kod za obradu dogadjaja izvršava se u istoj niti koju možemo nazvati nit za obradu događaja. • Metod main() kojim se startuje aplikacija se izvršava u posebnoj niti i to je glavna nit za aplikaciju. • Dok se izvršava kod za obradu jednog događaja, ostali događaji ne mogu biti obrađeni. • Kod za obradu narednog događaja počinje da se izvršava tek kada se završi obrada tekućeg događaja. • Dakle, interakcija korisnika i programa u velikoj meri zavisi od vremena potrebnog za obradu događaja. Biljana Stojanović
Obrada događaja – NAPOMENE (nastavak) • Zbog činjenice da se obrada događaja vrši u jednoj niti koja je odvojena od niti u kojoj se izvršava metod main(), nakon što je GUI neke aplikacije prikazan, ne sme se vršiti njegova modifikacija. U suprotnom, može doći do deadlock-a. Biljana Stojanović
Obrada događaja – NAPOMENE (nastavak) • Da bi se izbegla pojava deadlock-a u aplikaciji, neophodno je ceo kod kojim se kreira GUI smestiti u nit za obradu događaja. • U te svrhe koristi se statički metod invokeLater() iz klase javax.swing.Utilities kojim se na jednostavan način kreira GUI unutar niti za događaje. • invokeLater() izvršava run() metod za objekat koji je prosleđen kao argument (objekat anonimne klase koja implementira interfejs Runnable) u okviru niti za obradu događaja nakon što su procesirani svi događaji koji su čekali. Biljana Stojanović
Obrada događaja – NAPOMENE (nastavak) • Metod run() iz interfejsa Runnable se inače poziva kada se objekat izvršava u novoj niti. • U našem slučaju, run() poziva statički metod kreirajGUI() koji kreira prozor i njegove komponente, tako da se ceo taj kod sada izvršava u niti za obradu događaja. • U prethodnoj varijanti gde nije korišćen metod invokeLater(), kreiranje prozora i njegovih komponenti se vršilo u glavnoj niti, pa je postojala mogućnost nastanka deadlock-a glavne niti i niti za obradu događaja. Biljana Stojanović
Obrada dogadjaja – NAPOMENE (nastavak) • Isti princip koristi se i pri radu sa apletima. • Metod init() će biti oblika: • public void init() { SwingUtilities.invokeLater ( new Runnable() { public void run() { kreirajGUI(); } }); } Metod kreirajGUI() kreira sadržaj apleta. BiljanaStojanović