|
|
|
остановка обработки события
|
|||
|---|---|---|---|
|
#18+
Есть такая ситуация. На объекте происходит событие . Запускается метод вызывающий последовательно методы обработки у слушателей (им передается какой-нить ActionEvent). У одного из слушателей при выполнении метода обработки события возникает исключение. Как при этом остановить цикл ? Пока додумался до того что у объекта ActionEvent создать поле и проверяет его состояние в цикле вызова обработки событий : Объект у которого исключение установит это поле в false . Внутри цикла вызова обработчиков сделать проверку -если false то break . Может есть более элегантные решения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2013, 12:10:50 |
|
||
|
остановка обработки события
|
|||
|---|---|---|---|
|
#18+
А в catch нельзя break вставить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2013, 12:16:01 |
|
||
|
остановка обработки события
|
|||
|---|---|---|---|
|
#18+
А у вас что, выкидывается исключение, никто его не ловит, но цикл всё равно продолжается? Или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2013, 12:21:51 |
|
||
|
остановка обработки события
|
|||
|---|---|---|---|
|
#18+
no56892, исключение выбрасывается в методе одного объекта , а цикл надо остановить у другого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2013, 12:30:25 |
|
||
|
остановка обработки события
|
|||
|---|---|---|---|
|
#18+
Николай Ced.no56892, исключение выбрасывается в методе одного объекта , а цикл надо остановить у другого Ааа... у вас там Checked Exception и вы не можете его прописать в объявлении, поэтому ловите внутри слушателя, вместо того чтобы ловить снаружи цикла? Покажите уже, наконец, код. То что вы предлагаете тоже возможно. Например у AWTEvent уже есть флаг consumed. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2013, 12:34:44 |
|
||
|
остановка обработки события
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, У объекта А есть цикл который последовательно вызывает методы на объектах B C D E F передавая им в качестве параметра некий объект содержащий инфу о произошедшем событии. У объектов В и С методы отработали инормально. У E метод вызвал исключение (которое конечно же перехватилось ). Надо чтобы на этом процесс вызова методов обработки событияу метода А остановился- чтобы у F не вызывалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2013, 12:36:56 |
|
||
|
остановка обработки события
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Ок. Тогда я видимо правильным путем пошел. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2013, 12:38:15 |
|
||
|
остановка обработки события
|
|||
|---|---|---|---|
|
#18+
Николай Ced., Что за мода разбираеться в терминах A,B,C,1,2,3. Давайте реалистичные имена классам. По-вашему, вот такой код, приведет к полному перебору цикла не зависимо от того было там в обработчике исключение или нет? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2013, 12:41:55 |
|
||
|
остановка обработки события
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Ну имена такие только для примера во первых. Во вторых вы конечно правы - достаточно не перехватывать исключение. Но у меня немного другой случай . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2013, 12:46:16 |
|
||
|
остановка обработки события
|
|||
|---|---|---|---|
|
#18+
Николай Ced.Ну имена такие только для примера во первых. Нет, а я, правда, подумал что у вас реально так объекты называются. Вот авторы мануалов, для Hibernate, они люди глупые - используют всякие наивные имена для примеров. Cat, Dog, Animal. Тупо как-то. Надо было A, B, C использовать. Сразу понятно, что для чего. И солидно впридачу. Николай Ced.Но у меня немного другой случай . У вас немного не такой случай как вы описали в посте, а другой, но описали вы именно этот а не тот почему-то. Действительно любопытно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2013, 12:57:42 |
|
||
|
остановка обработки события
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Спасибо Ваши ответы натолкнули меня на иной путь решения задачи. На этом тему закрываю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2013, 12:58:37 |
|
||
|
остановка обработки события
|
|||
|---|---|---|---|
|
#18+
Николай Ced.Спасибо Ваши ответы натолкнули меня на иной путь решения задачи. На этом тему закрываю. Решением вопроса принятно делиться с остальными читателями форума. Вдруг кому в будущем пригодится. Если вы решили остановиться на флаге consumed, то это решение, ИМХО, нарушает правило "наименьшего удивления". Потому что "произошла ошибка" и "событие обработано" это немного разные состояния. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2013, 13:06:51 |
|
||
|
остановка обработки события
|
|||
|---|---|---|---|
|
#18+
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); } } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2013, 13:30:13 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38498290&tid=2128001]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
14ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 281ms |

| 0 / 0 |
