Дерево удаляется при попытке обновить средство просмотра дерева

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

Вот фрагмент моего кода.

getChildren()
{
     resource.addListener(this);
}

public void dataChangeListener(changeddata)
{
     tree.refresh(changedata,true); // Tree shows as disposed.
}

С уважением, Гириш


person Girish Chandran C    schedule 03.07.2012    source источник


Ответы (1)


Все обновления пользовательского интерфейса должны выполняться в потоке пользовательского интерфейса. Вы можете сделать это с помощью следующего кода. Вы также должны проверить, было ли дерево удалено перед вызовом обновления.

    Display.getDefault().asyncExec(new Runnable() {
        @Override
        public void run() {
            if (!tree.getTree().isDisposed()) {
                tree.refresh(changedData, true);
            }
        }
    });
person Nick Wilson    schedule 03.07.2012
comment
Привет, Ник. Когда я пытался получить отображение в методе dataChangeListener с помощью tree.getControl.getDisplay(), он показывает, что виджет удален. Почему так показывает - person Girish Chandran C; 03.07.2012
comment
Попробуйте поставить точку останова на метод Tree.dispose(), чтобы увидеть, вызывается ли он до того, как будет вызван ваш слушатель. У вас есть код, который обновляет контейнер деревьев? Может быть, это удаление/воссоздание дерева? - person Nick Wilson; 03.07.2012
comment
Привет, ник, в каком классе вызывается Tree.dispose() - person Girish Chandran C; 03.07.2012
comment
Спасибо, Ник, на самом деле мой слушатель избавлялся от дерева. Теперь я решил это. Спасибо за вашу поддержку - person Girish Chandran C; 03.07.2012