Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как сделать работу с событиями?


Автор: SmaLL 1.4.2003, 17:27
Есть два класса - один делает интерфейс пользователя, а второй выполняет какую-либо операцию (например считывает файл).
Мне нужно в интерфейсе отображать прогресс выполнения операции рабочим классом.

На Дельфи в рабочем классе делалось свойство процедурного типа, а интерфейсный класс передавал свойству свой обработчик (метод).

А как такие вещи делаются в Яве?

Автор: AntonSaburov 1.4.2003, 18:03
Вообще такой механизм делается за счет callback функций. Т.е. контроллеру (в данном случае, считыватлю файла) передается указатель на класс, у которого есть какая-то функция. В процессе своей работы контроллер регулярно дергает этот класс за эту функцию. Так вот если, ты сделаешь эту функцию так, чтобы она отображала прогресс выполнения - то вот и все решение.

Автор: SmaLL 1.4.2003, 18:26
Т.е. это как для обработки событий графических контролов нужно создать внутри интерфейсного класса ещЁ один класс с callback функцией и передавать этот класс контроллеру?

Автор: AntonSaburov 1.4.2003, 22:11
Совершенно верно.

Автор: SmaLL 1.4.2003, 23:17
Cенькс

Автор: Sun 2.4.2003, 18:35
Цитата(AntonSaburov @ 1.4.2003, 15:03)
Вообще такой механизм делается за счет callback функций.

Вообщето, легче в потоке в котором идет считывание файла, вызывать метод прогресс бара, который отвечает за текущую позицию и инкрементировать счетчик позиций прогресс бара. Так для класса ProgressMonitor можно вызывать метод setProgress(int nv).
А говорить о механизме callback функций для Java не совсем правильно, так как такого понятия как указатель на функцию в Java нет. Механизм callbackфункций был придуман, все таки, для таких языков как C, IMHO.

Автор: SmaLL 2.4.2003, 23:06
Цитата(Sun @ 2.4.2003, 10:35)
Вообщето, легче в потоке в котором идет считывание файла, вызывать метод прогресс бара, который отвечает за текущую позицию и инкрементировать счетчик позиций прогресс бара. Так для класса ProgressMonitor можно вызывать метод setProgress(int nv).
..........

Так для этого нужно чтобы класс, считывающий файл знал о существовании прогресса!
А если кроме прогресса мне понадобится изменять ещЁ например Label, то класс должен будет ещЁ знать о Label, так можно дойти до передачи ссылки на весь класс с интерфейсом.
Нет, Sun , это не наш метод.

Я уже разобрался с этой проблемой.

Автор: AntonSaburov 2.4.2003, 16:43
Цитата
А говорить о механизме callback функций для Java не совсем правильно, так как такого понятия как указатель на функцию в Java нет. Механизм callbackфункций был придуман, все таки, для таких языков как C, IMHO


Callback не подразумевает указатель - это просто так повелось языков типа С или BorlandPascal из-за их техники реализации данного механизма.

А сам механизм только подразумевает технику при которой объекту передается ссылка/указатель/иной механизм с помощью которого вызываемый объект может послать сообщение вызывающему.

Так что callback для JAVA тоже нормально звучит.

Хотя конечно можно говорить об отсутствии терминологического стандарта, который и порождает разные интепретации.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)