С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
6 / 6 / 4
Регистрация: 12.04.2014
Сообщений: 46

Модель событий (генерация и обработка)

17.02.2015, 21:14. Показов 1592. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть в языке механизм делегирования событий, т.е в одном месте оно создается, а в другом обрабатывается. Что очень удобно для работы в асинхронном режиме.

Я понимаю как работает эта система в GUI. Другой вопрос как перенести эту механику на другие задачи? Например, что-то пришло на порт, или в папке появился файл, или в другой части программы собралась комбинация флагов которую надо обработать только после того как она собралась...

Как корректно описать генерацию события для последующей обработки? Для обработки, я так понимаю, необходимо описать слушателя и действия при появлении события...

Если можно разъясните на примере отличном от Gui
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.02.2015, 21:14
Ответы с готовыми решениями:

Обработка событий. Механизм делегирования событий
Разработать учебную программу. Основная ее задача – разработка упрощенной имитации поведения объектов (все последующие лабораторные работы...

Генерация событий Windows
Товарищи, подскажите, пожалуйста, как решить такую проблему - мне нужно чтобы программа (на Delphi) висела в памяти и периодически...

Расширяющие методы и генерация событий
Всем привет. Изучаю C# тема события. Решил попрактиковаться и написал такой код: using System; namespace Test1 { public...

5
17 / 17 / 7
Регистрация: 05.09.2012
Сообщений: 246
18.02.2015, 01:10
Observer и Observable не подойдёт?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.*;
 
// This is the observing class 
class Watcher implements Observer {
    public void update (Observable obj, Object arg) {
        System.out.println("update() called, count is: " + ((Integer)arg).intValue());
    }
}
 
// This is the class being observed
class BeingWatched extends Observable {
    void counter (int period) {
        for (; period>=0; period --) {
            setChanged();
            notifyObservers(new Integer (period));
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                System.out.println("Sleep Interrupted");
            }
        }
    }
}
 
public class ObserverDemo {
    public static void main(String[] args) {
        BeingWatched observed = new BeingWatched();
        Watcher observing = new Watcher();
        
        /*Add the observing to the list of observers for observed object*/
        observed.addObserver(observing);
        observed.counter(10);
    }
    
}
0
6 / 6 / 4
Регистрация: 12.04.2014
Сообщений: 46
18.02.2015, 10:44  [ТС]
AMufu, благодарю. Однако осталось несколько вопросов:
1) Правильно ли я понимаю что наблюдаемый должен быть в отдельном потоке?
2) В строке 14 примера выставляется флаг изменения, т.е в "боевой" программе необходимо собрать нужное состояние и просто поменять флаг? А затем в строке 15 оповестить подключенных слушателей?
3) Самый интересный вопрос(возможно не в этой теме): как узнать что где-то отдельно от моей программы изменились данные, скажем появились данные на порту, делать поток опроса с вечным циклом и если есть отличия от старого состояния менять флаги(вызывать строки 14-15 данного примера)?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.02.2015, 10:56
Гоблин666, https://ru.wikipedia.org/wiki/... 0%B8%D1%8F)

вот тут подробно описанна модель
0
6 / 6 / 4
Регистрация: 12.04.2014
Сообщений: 46
18.02.2015, 11:15  [ТС]
KEKCoGEN, благодарю, прочитал.
В статье указан вариант когда происходят всего 3 оповещения. Если же надо получать данные раз в, скажем, 10 секунд, то это все равно вечный цикл с засыпанием внутри, или от данного варианта можно уйти?
0
17 / 17 / 7
Регистрация: 05.09.2012
Сообщений: 246
18.02.2015, 15:54
Цитата Сообщение от Гоблин666 Посмотреть сообщение
1) Правильно ли я понимаю что наблюдаемый должен быть в отдельном потоке?
2) В строке 14 примера выставляется флаг изменения, т.е в "боевой" программе необходимо собрать нужное состояние и просто поменять флаг? А затем в строке 15 оповестить подключенных слушателей?
Условно, да. Думаю вы смотрели в доках уже (http://docs.oracle.com/javase/8/docs/api/). Метод setChanged() не возвращает значения Истина или Ложь, но изменяет состояние объекта на "изменён", а метод notifyObservers(Object arg) оповещает наблюдателей об изменении и изменят состояние объекта обратно на "не изменён".

Добавлено через 33 минуты
Цитата Сообщение от Гоблин666 Посмотреть сообщение
1) Правильно ли я понимаю что наблюдаемый должен быть в отдельном потоке?
Кстати про отдельный поток - если организовывать по отдельным потокам, тогда лучше пользоватся правилами для потоков. В приведенном примере все сделано в 1 потоке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2015, 15:54
Помогаю со студенческими работами здесь

Генерация разных событий на одну и ту же кнопку
Добрый день уважаемые форумчане. Нужна ваша помощь. Нужно сделать примерно такое. При клике на кнопку открывается MsgBox. Затем MsgBox...

Модель событий страницы
Помогите пожалуйста разобраться. Есть WEB-приложение, есть мастер страница и достраиваемые на ее основе несколько страниц. На...

Периодическая генерация событий сообщений окну - как реализовать?
Почитал немного про создание оконных приложений - очень интересно. Даже пятнашки, думаю, могу навскидку за несколько минут написать. А...

Flash в WebBrouser, генерация событий мыши и клавиатуры в неактивном окне
Доброго времени суток. Недавно у меня возникла задача: необходимо перехватывать события мыши (типа click mouseup mousedown move) и...

Модель парикмахерской. Генерация случайного числа
Есть такое задание: написать программу, реализующую модель работы парикмахерской с N=3 кресел. Интервалы прихода клиентов распределены...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru