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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Беготня по дереву 
V
    Опции темы
Demetrio
  Дата 21.5.2008, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 1.5.2007

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



Есть стандартый GUI(swt) интерфейс - слева дерево, справа отображение листьев дерева...
Каждый элемент дерева имеет свой метод отображения... все хорошо бы, но как быть с распараллеливанием процессов.. Если быстро бегать по элементам дерева, то начинают запускаться  процессы отображения, а они бывают долгие....то есть процесс получения данных-отрисовки не закончился, а пошел отображаться другой - нововыбранный....Принудительно ждать окончания процесса не хочется....  exception вываливает, когда я removeChildWidgets(right), что правильно...
Как мне правильно прервать метод, который где-то вызывает новый поток....
немного криво описал, но как смог...

метод при смене элемента....

Код

    public void viewContent() {
        WidgetShop.removeChildWidgets(right);
        getSelectionObject().view(right);
        right.layout(true);
    }


public void setAction() {
        addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                TreeObject treeObject = getSelectionObject();
                if (treeObject == null) return;
                if( idBranch == treeObject.id ) return;
                idBranch = treeObject.id;
                SwtTsm.slm.getProgressMonitor().setCanceled(true); // not working
                SwtTsm.slm.getProgressMonitor().done(); // not working
                viewContent();
            }
        });
    }



метод получения данных для отображения...

Код

protected ArrayList<String> getRequest(final String command) {
        final ArrayList<String> list = new ArrayList<String>();
        try {
            ModalContext.run(new IRunnableWithProgress() {
                public void run(IProgressMonitor progressMonitor) {
                    progressMonitor.beginTask("Waiting...", IProgressMonitor.UNKNOWN);
                    getRequestMain(command, list);
                    progressMonitor.done();
                }
            }, true, SwtTsm.slm.getProgressMonitor(), SwtTsm.shell.getDisplay());
        } catch (InterruptedException e) {
            System.out.println("exp1");
        } catch (InvocationTargetException e) {
            System.out.println("exp2");
        } finally {
            SwtTsm.slm.setMessage("Ready");
        }
        return list;
    }





Это сообщение отредактировал(а) Demetrio - 21.5.2008, 13:31
PM MAIL   Вверх
w1nd
Дата 21.5.2008, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 23
Всего: 54



Прервать насильственно - никак. В процессе отображения следует проверять IProgressMonitor.isCancelled(), а все запросы к дереву (в том числе удаление и добавление) ставить в ту же очередь, что и вытаскивание данных для отображения.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Demetrio
Дата 22.5.2008, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 1.5.2007

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



Да, собстно я расстался с мыслью о асинхронности....
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0679 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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