|
21.05.2013, 17:25 | #1 |
Участник
|
setTimeOut() не работает в классе, если экземпляр класса создан через вызов MenuFunction
Если экземпляр класса создается на run() формы так:
myClass = new MyClass(); то вызов setTimeOut() в конце кода new() класса приводит к желаемому результату (вызов заданного метода класса через заданное время). Если же экземпляр класса создается на run() формы так: new MenuFunction(s, MenuItemType::Action).run(); (где s - строка требуемого MenuItem'а), то после всех вызовов main(), new() и setTimeOut() ничего не происходит. Какая разница для setTimeOut(), как именно создан экземпляр класса ? |
|
21.05.2013, 17:30 | #2 |
Роман Долгополов (RDOL)
|
класс (или его предок) явно унаследован от Object?
во всех new() иерархии super() не забыт? ну и что в main() то написано? |
|
21.05.2013, 17:34 | #3 |
Участник
|
Класс явно extends Object , потому что иначе setTimeOut() в нем не будет
Super() в new() есть. Повторю: если явно звать конструктор на run() формы, то все хорошо. В main() написано myClass = new MyClass(); (одна строчка). |
|
21.05.2013, 17:40 | #4 |
Роман Долгополов (RDOL)
|
ну так исполнение уходит сразу из main(), внешних ссылок нет - экземпляр объекта сразу в мусор
|
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
21.05.2013, 17:41 | #5 |
Боец
|
Насколько я помню, setTimeOut работает только на форме, т.е. в классе FormRun.
Ещё можно создать свой класс-наследник formRun, перекрыть у него init() и run(), закоментировав в обоих super(), чтобы отвязать его от настоящей формы. В этом случае setTimeOut тоже будет работать. |
|
21.05.2013, 17:43 | #6 |
Роман Долгополов (RDOL)
|
|
|
|
За это сообщение автора поблагодарили: DSPIC (2). |
21.05.2013, 17:49 | #7 |
Участник
|
setTimeOut работает в классе, если он - наследник Object'а.
А насчет сразу в мусор, это возможно |
|
21.05.2013, 17:44 | #8 |
Участник
|
в первом случае у вас остается ссылка на объект класса myClass в самой форме
Во втором случае, ссылка удаляется вместе с завершением run() класса Ничего удивительного. Если таки хотите вызывать через пункт меню, то надо ссылку на объект помещать куда-то, типа как в SysGlobalCache или т.п. |
|
21.05.2013, 17:53 | #9 |
Участник
|
Цитата:
ссылку на объект помещать куда-то, типа как в SysGlobalCache
|
|
21.05.2013, 17:59 | #10 |
Роман Долгополов (RDOL)
|
удалить из кеша
посмотрите на методы SysGlobalCache - все станет понятно сразу SysGlobalCache просто обертка вокруг класса Map (мэп мэпов точнее, но не суть важно) соответственно можно и поместить в него данные - set(), и удалить - remove() Последний раз редактировалось db; 21.05.2013 в 18:13. |
|
22.05.2013, 16:53 | #11 |
Участник
|
Всем спасибо.
|
|