Кіріспе
Оқиғаларды жіберу тізбегі (EDT) – Java-да Abstract Window Toolkit (AWT) графикалық пайдаланушы интерфейсі оқиғалар кезегін өңдеу үшін пайдаланылатын фонолық тізбек. Бұл Java-дан өзге көптеген жағдайларда кең таралған оқиғаға негізделген бағдарламалаудың жалпы ұғымының мысалы, мысалы, веб-браузерлер немесе веб-серверлер. Оқиғалардың көп бөлігі – пайдаланушы интерфейсі компоненттерін қайта бояуға немесе тышқан немесе пернетақта сияқты енгізу құрылғыларынан келетін енгізу оқиғаларын тудыратын жаңарту оқиғалары. AWT бір тізбекті бояу моделін қолданады, онда барлық экран жаңартулары бір тізбектен орындалуы керек. Оқиғаларды жіберу тізбегі – көрінетін пайдаланушы интерфейсі компоненттерінің визуальдық күйін жаңартуға рұқсат етілген жалғыз тізбек. Басқа тізбектерден көрінетін компоненттерді жаңарту Swing қолданатын Java бағдарламаларындағы көптеген қателердің себебі болып табылады. Оқиғаларды жіберу тізбегі Adobe Flash-те "бастапқы жұмыскер", ал SWT, .NET Framework және Android-те "UI тізбегі" деп аталады.
GUI қатынастарын сериалдастыру үшін хабарламалар тізбегі
Бағдарламалық қосымша әдетте бірнеше жіптен және бір ғана GIT дерек құрылымынан тұрады. Бұл GIT ортақ дерек құрылымы екенін білдіреді және бір уақытта тек бір жіп оған қол жеткізуін қамтамасыз ету үшін синхрондау қажет. AWT және Swing GUI компоненттерін құру және оларға қол жеткізудің (жіп қауіпсіз емес) әдістерін ұсынады және бұл әдістер барлық қолданба жіптеріне көрінеді. Сонымен қатар, басқа GUI фреймворктарында да тек бір ғана Оқиға Жіберу Жіпі (Event Dispatching Thread) осы әдістерді орындауға құқылы. Бағдарламашылар көбінесе бұл талапты ұмытып кетеді, сондықтан үшінші тараптық Substance сияқты сыртқы көрініс (Look and Feel) тізімі, мұндай кодтау қателігін болдырмау үшін, Оқиға Жіберу Жіпінде жұмыс істемегенде, кез келген Swing компонентін құрудан бас тартады. GUI-ге қол жеткізу тізбектелген (сериалданған) және басқа жіптер EDT-де орындалатын кодты EDT хабарлама кезегі арқылы жіберуі мүмкін. Яғни, басқа GUI фреймворктарында да Оқиға Жіберу Жіпі өмірін хабарларды өңдеуге арнайды: ол GUI арқылы орындалатын әрекеттердің хабар кезегін сақтайды. Бұл сұраулар жүйе және кез келген қолданба жібі арқылы кезеке жіберіледі. EDT оларды бірінен соң бірін өңдеп, GUI компоненттерін жаңарту арқылы жауап береді. Хабарлар белгілі әрекеттерден тұруы мүмкін немесе кері шақыруларды (callbacks) қамтуы мүмкін, бұл EDT арқылы орындалуы тиіс пайдаланушы әдістеріне сілтемелер. Барлық хабарламаларға қойылатын маңызды талап – GUI жауапты болуын сақтау үшін олар жылдам орындалуы керек. Әйтпесе, хабарлама циклы тоқтатылады (бұғатталады) және GUI тоңуын (фризинг) бастан кешіруге болады.
Пайдаланушы кодын ЭДТ-ға жіберу
EDT-ге кодты жіберу және циклды тоқтатпай ұзақ процестерді орындау үшін әртүрлі шешімдер бар.
Компоненттік оқиғаларды басқару (тыңдаушылар)
GUI компоненттері кері шақырулар тізімін, яғни Тыңдаушыларды қолдайды, олар әдетте компоненттер құрылған кезде толтырылады. EDT пайдаланушы компоненттермен әрекеттескен кезде (мәселен, батырманы басу, тышқанды жылжыту, элементті таңдау, фокус жоғалту, компоненттің мөлшерін өзгерту және т.б.) тыңдаушыларды іске қосады.
Жұмысшыны жобалау үлгісі
Басқа тізбекте тапсырманы орындау және нәтижелерді EDT-де көрсету жұмысшы үлгісі арқылы біріктірілуі мүмкін. Sun Microsystems компаниясы жасаған javax.swing.SwingWorker класы – жұмысшы үлгісінің іске асырылуы болып табылады және Java 6 нұсқасынан бастап стандартты Swing тарату бөлігіне кіреді. SwingWorker әдетте EDT-ні тоқтатпау үшін ұзаққа созылатын тапсырманы орындау мақсатымен EDT-де орындалатын оқиға тыңдаушысынан шақырылады.
Теңдес
Жүйе. Компоненттік модель. BackgroundWorker .NET Framework
flash. жүйе. Жұмысшы Adobe Flash
android. os. AsyncTask Android
flash. system. Worker Adobe Flash
android. os. AsyncTask Android