powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / остановка обработки события
14 сообщений из 14, страница 1 из 1
остановка обработки события
    #38498250
Николай Ced.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такая ситуация.
На объекте происходит событие . Запускается метод вызывающий последовательно методы обработки у слушателей (им передается какой-нить ActionEvent). У одного из слушателей при выполнении метода обработки события возникает исключение. Как при этом остановить цикл ?
Пока додумался до того что у объекта ActionEvent создать поле и проверяет его состояние в цикле вызова обработки событий :

Объект у которого исключение установит это поле в false . Внутри цикла вызова обработчиков сделать проверку -если false то break .
Может есть более элегантные решения?
...
Рейтинг: 0 / 0
остановка обработки события
    #38498258
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в catch нельзя break вставить?
...
Рейтинг: 0 / 0
остановка обработки события
    #38498264
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у вас что, выкидывается исключение, никто его не ловит, но цикл всё равно продолжается? Или как?
...
Рейтинг: 0 / 0
остановка обработки события
    #38498275
Николай Ced.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
no56892,

исключение выбрасывается в методе одного объекта , а цикл надо остановить у другого
...
Рейтинг: 0 / 0
остановка обработки события
    #38498281
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай Ced.no56892,

исключение выбрасывается в методе одного объекта , а цикл надо остановить у другого
Ааа... у вас там Checked Exception и вы не можете его прописать в объявлении, поэтому ловите внутри слушателя, вместо того чтобы ловить снаружи цикла? Покажите уже, наконец, код.

То что вы предлагаете тоже возможно. Например у AWTEvent уже есть флаг consumed.
...
Рейтинг: 0 / 0
остановка обработки события
    #38498286
Николай Ced.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

У объекта А есть цикл который последовательно вызывает методы на объектах B C D E F передавая им в качестве параметра некий объект содержащий инфу о произошедшем событии. У объектов В и С методы отработали инормально. У E метод вызвал исключение (которое конечно же перехватилось ). Надо чтобы на этом процесс вызова методов обработки событияу метода А остановился- чтобы у F не вызывалось.
...
Рейтинг: 0 / 0
остановка обработки события
    #38498290
Николай Ced.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Ок. Тогда я видимо правильным путем пошел. Спасибо.
...
Рейтинг: 0 / 0
остановка обработки события
    #38498301
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай Ced.,
Что за мода разбираеться в терминах A,B,C,1,2,3. Давайте реалистичные имена классам.
По-вашему, вот такой код, приведет к полному перебору цикла не зависимо от того было там в обработчике исключение или нет?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class A{
  void fireEvent(Event e){ 
        for(Listener l : listeners){
            l.eventPerformed(e);
        }
  }
}

class B{
   void eventPerformed(Event e){
      throw new RuntimeException();
   } 
}
...
Рейтинг: 0 / 0
остановка обработки события
    #38498312
Николай Ced.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Ну имена такие только для примера во первых. Во вторых вы конечно правы - достаточно не перехватывать исключение. Но у меня немного другой случай .
...
Рейтинг: 0 / 0
остановка обработки события
    #38498349
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай Ced.Ну имена такие только для примера во первых.

Нет, а я, правда, подумал что у вас реально так объекты называются.
Вот авторы мануалов, для Hibernate, они люди глупые - используют всякие наивные имена для примеров. Cat, Dog, Animal. Тупо как-то. Надо было A, B, C использовать. Сразу понятно, что для чего. И солидно впридачу.

Николай Ced.Но у меня немного другой случай .
У вас немного не такой случай как вы описали в посте, а другой, но описали вы именно этот а не тот почему-то. Действительно любопытно.
...
Рейтинг: 0 / 0
остановка обработки события
    #38498356
Николай Ced.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Спасибо Ваши ответы натолкнули меня на иной путь решения задачи. На этом тему закрываю.
...
Рейтинг: 0 / 0
остановка обработки события
    #38498373
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай Ced.Спасибо Ваши ответы натолкнули меня на иной путь решения задачи. На этом тему закрываю.
Решением вопроса принятно делиться с остальными читателями форума. Вдруг кому в будущем пригодится.
Если вы решили остановиться на флаге consumed, то это решение, ИМХО, нарушает правило "наименьшего удивления". Потому что "произошла ошибка" и "событие обработано" это немного разные состояния.
...
Рейтинг: 0 / 0
остановка обработки события
    #38498442
Николай Ced.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Итак решение такое :
1) если использовать исключения- я должен буду объявить методы обработки как throws Exception - что мне не подходит по иным причинам .
2) меня больше устроит мое пероначальное решение

class ActionEvent{
private boolean stop=false;
public boolean isStop()
{
return stop;
}
public void setStop(boolean stop)
{
this.stop=stop;
}


}

class A{
void fireEvent(ActionEvent e){
for(Listener l : listeners){

if(e.isStop())
{
break;
}

l.eventPerformed(e);
}
}
}

class B{
void eventPerformed(ActionEvent e){

try{

throw new RuntimeException();
}catch(Exception ex)
{
e.setStop(true);
}
}
}
...
Рейтинг: 0 / 0
остановка обработки события
    #38498451
Николай Ced.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Николай Ced.,

ActionEvent конечно же extends EventObject со всеми super(Object) и т.д.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / остановка обработки события
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]