Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> EventQueue#coalesceEvents - гарантии вызова 
:(
    Опции темы
Royan
Дата 10.6.2005, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 1
Всего: 15



Что говорит документация (http://java.sun.com/j2se/1.4.2/docs/api/ja...a.awt.AWTEvent)), она гвоорит, что ежели в очереди присутствуют два события из одного источника и с одинаковым ID, то искомая функция вызывается.

Позвольте же спросить, а каковы искусственные условия, при которых это возможно? То есть в буквальном смысле как искусственно, используя postEvent(), пихнуть в очередь два сообщения.

В общем, мои тренировки ничем не завершились, а тренировался я вот на чем:
Код

import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.Frame;
import java.awt.event.ComponentEvent;

public class mytest {
    private Frame frm = new Frame("Frm");

    class MyCmp extends Component {
        private boolean ceFlag = false;

        public MyCmp() {
            super.enableEvents(ComponentEvent.COMPONENT_RESIZED);
        }

        public AWTEvent coalesceEvents(AWTEvent arg0, AWTEvent arg1) {
            ceFlag = true;
            AWTEvent ae = super.coalesceEvents(arg0, arg1);
            return ae;
        }

        public boolean ceCalled() {
            return ceFlag;
        }
    }

    public boolean implicitCallToCoalesceEvents() {
        MyCmp myСmp = new MyCmp();
        frm.setVisible(true);
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {         
            e.printStackTrace();
        }
        frm.add(myСmp);
        System.out.println("coalesceEvents called: " + myСmp.ceCalled());
        return true;
    }

    public static void main(String[] args) {
        new mytest().implicitCallToCoalesceEvents();
        System.exit(0);
    }
}

Я пробовал расширяться от разных классов, но это тоже не помогло.

Это сообщение отредактировал(а) Royan - 10.6.2005, 16:45


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Domestic Cat
Дата 11.6.2005, 03:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Я не совсем понял сути... Зачем это надо? Потом, где собственно события с одинаковыми ИД на очереди, ведь они вполне могут туда не попадать одновременно, а скорее всего успевают обрабатываться по отдельности.


--------------------

PM   Вверх
Royan
Дата 11.6.2005, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 1
Всего: 15



Нужно, например, в том случае, когда работаешь с очередью и сам хэндлишь события, и специально для какого-то компонента (объекта и т.д.) надо отреагировать на последнее вхождение события, ибо реакция на более раннее событие может оказаться совсем не нужным.

Цитата
ведь они вполне могут туда не попадать одновременно, а скорее всего успевают обрабатываться по отдельности

В том - то и дело что мне желательно смоделировать такую ситуацию, когда в очереди находятся два одинаковых события (с одним ID) от одного и того же компонента

Вот обновленный код, здесь должно быть более понятно, что именно я пытаюсь совершить.

Код

public class test {
    private Frame frm = new Frame("Frm");

    class MyCmp extends Component {
        private boolean ceFlag = false;

        public MyCmp() {
            super.enableEvents(ComponentEvent.COMPONENT_RESIZED);
        }

        public AWTEvent coalesceEvents(AWTEvent arg0, AWTEvent arg1) {
            ceFlag = true;
            AWTEvent ae = super.coalesceEvents(arg0, arg1);
            return ae;
        }

        public boolean ceCalled() {
            return ceFlag;
        }
    }

    public boolean implicitCallToCoalesceEvents() {
        MyCmp cmp = new MyCmp();

        ComponentEvent ce = new ComponentEvent(cmp,
                ComponentEvent.COMPONENT_RESIZED);

        EventQueue eq = new EventQueue();

        /*
         * По идее сразу после отправления следующих двух событий автоматом
         * должна вызваться MyCmp#coalesceEvents(), но этого не происходит
         * почему-то... А вызваться она должна потому что эти события никто не
         * хендлит, и они абсолютно одинаковые.
         */
        eq.postEvent(ce);
        eq.postEvent(ce);

        System.out.println("coalesceEvents called: " + cmp.ceCalled());
        return true;
    }

    public static void main(String[] args) {
        new test().implicitCallToCoalesceEvents();
        System.exit(0);
    }
}



--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.