Как закрыть диалог в коде?

Итак, я делаю плагин eclipse, и у меня есть собственный диалог, расширяющий класс диалога.

Мой диалог в основном заполняет древовидную структуру данными с сервера. Иногда данные не могут быть заполнены (потому что сервер не работает), поэтому мое дерево пусто.

Я сделал еще одно диалоговое окно с сообщением об ошибке, если я не могу подключиться к серверу. Моя проблема в том, что я хотел бы закрыть начальный диалог, когда я нажимаю ok в диалоговом окне ошибки.

Я не смог найти хороший способ сделать это. Я попытался установить для setBlockOnOpen значение false. Я попытался вызвать команду cancelPressed. Ни один из них не работал. Я вызвал их в функции createDialogArea.

Любые идеи о том, как я могу заставить это работать?


person Ramis    schedule 10.02.2014    source источник
comment
Не могли бы вы опубликовать свой собственный код диалога?   -  person Haresh Chhelana    schedule 10.02.2014
comment
У меня нет с собой последнего кода. Но вот код, который я изменил, должно быть легко понять, что я имею в виду. pastebin.com/gPKca2M7 Как видите, если возникает исключение для cannotconnectoserver, оно возвращает значение null. Три строки с комментариями — это три разных решения, которые я пробовал, но они не сработали.   -  person Ramis    schedule 10.02.2014
comment
Вы пытались использовать этот метод, уволить () ...   -  person Haresh Chhelana    schedule 10.02.2014


Ответы (2)


Вы должны сделать вызов close после завершения создания диалога. Вы можете сделать это, используя этот код:

parent.getDisplay().asyncExec(new Runnable()
  {
    @Override
    public void run()
    {
      close();
    }
  });

в вашем методе createDialogArea. Однако диалоговое окно может появиться ненадолго. Было бы лучше сделать вашу проверку перед созданием диалога.

person greg-449    schedule 10.02.2014
comment
спасибо, что сработало. (хотя я использовал cancelpressed(), потому что так было бы лучше) - person Ramis; 11.02.2014

Это в основном диалог отмены пользователя. вам нужно вызвать cancelPressed(), чтобы это было последовательной обработкой, если у вас есть какой-либо код, который зависит от returnCode

if(noDataLoaded){
    Display.getDefault().asyncExec(new Runnable() {

     public void run() {
        cancelPressed():
    }
    });
}
person sambi reddy    schedule 10.02.2014