UI Freeze in SWT -


i new swt. trying create small application. has 2 screens. in first screen have take user credentials. has validated. if successful have query table , build tree structure. both validation , building tree freezes ui. searched stackoverflow , google. got below options. display.getdefault().asyncexec() , starting long running process separate thread ui thread.

but still ui freezes.

when user clicks on logon button. created thread. first step tried show indefinite progress bar using asyncexec. since have access uname , password have trigger asyncexec , perform login. if successful populated tree.

i triggered asyncexec close progress bar.

my ui freezes logon click till tree population completion. going wrong.

new thread(new runnable() {     private int                 progress    = 0;     private static final int    increment   = 10;      @override     public void run()     {         while (!progressbar.isdisposed())         {             display.getdefault().asyncexec(new runnable()             {                 @override                 public void run()                 {                     if (!progressbar.isdisposed())                         progressbar.setvisible(true);                 }             });              display.getdefault().asyncexec(new runnable()             {                 @override                 public void run()                 {                     string sauth = null;                     switch(tauth.gettext()){                     case "enterprise": sauth = "secenterprise"; break;                     case "ldap": sauth = "secldap"; break;                     case "windows ad": sauth = "secwinad"; break;                     case "sap": sauth = "secsapr3"; break;                     }                     try {                         log.info("attempting create enterprise session");                         corelogic.logonenterprise(tusr.gettext().trim(),tpwd.gettext().trim(),sauth,tcms.gettext());                         if(commonvariables.entsession){                             log.info("enterprise session created.");                              corelogic.getuniverse();                              log.info("populating universe tree");                              string[] temp;                              (entry<integer, unvobj> entry  : commonvariables.unvlst.entryset()) {                                    unvobj t = entry.getvalue();                                   temp = t.getpath().split("/");                                 if (temp[0].equals("universes")){                                 int max = temp.length;                                                               int =0 ;                                 boolean flag = false;                                 treeitem tritem = null;                                 do{                                      if(i == 0) {                                          if(tree.getitemcount() == 0){                                             flag = false;                                         }                                         else                                         {                                             for(int k = 0; k  < tree.getitemcount(); k++){                                                 if(temp[i].equals(tree.getitem(k).gettext())){                                                     i++;                                                     tritem = tree.getitem(k);                                                     flag =true;                                                     break;                                                 }                                                 else                                                 {                                                     flag = false;                                                 }                                             }                                         }                                     }                                     else{                                          if(tritem.getitemcount() == 0){                                             flag = false;                                         }                                         else                                         {                                             for(int k = 0; k  < tritem.getitemcount(); k++){                                                 if(temp[i].equals(tritem.getitem(k).gettext())){                                                     i++;                                                     tritem = tritem.getitem(k);                                                      flag =true;                                                     break;                                                 }                                                 else                                                 {                                                     flag = false;                                                                                }                                              }                                         }                                     }                                                                                                                 }while (flag == true && < max);                                  treeitem item = null;                                 if (i == 0){                                     (int k = 0; k < max; k++){                                         if(k == 0) {                                             item = new treeitem(tree,swt.none);                                             item.settext(temp[k]);                                               item.setdata("type","folder");                                              image image = new image(display,resourceloader.load("/images/fld.png"));                                             item.setimage(image);                                         }else                                         {                                             item = new treeitem(item,swt.none);                                             item.settext(temp[k]);                                             item.setdata("type","folder");                                             image image = new image(display,resourceloader.load("/images/fld.png"));                                             item.setimage(image);                                                                                    }                                      }                                 } else if( < max){                                     (int k = i; k < max; k++){                                         tritem  = new treeitem(tritem,swt.none);                                         tritem.settext(temp[k]);                                         tritem.setdata("type","folder");                                         image image = new image(display,resourceloader.load("/images/fld.png"));                                         tritem.setimage(image);                                                                          }                                 }                                  if (i == 0){                                     item = new treeitem(item,swt.none);                                     item.settext(t.getname());                                     item.setdata("type",t.getkind());                                     item.setdata("mapkey",entry.getkey());                                     if(t.getkind().equals("universe")){                                         image image = new image(display,resourceloader.load("/images/unv.ico"));                                         item.setimage(image);                                        }                                     else{                                         image image = new image(display,resourceloader.load("/images/unx.ico"));                                         item.setimage(image);                                        }                                  } else                                 {                                     tritem = new treeitem(tritem,swt.none);                                     tritem.settext(t.getname());                                     tritem.setdata("type",t.getkind());                                     tritem.setdata("mapkey",entry.getkey());                                     if(t.getkind().equals("universe")){                                         image image = new image(display,resourceloader.load("/images/unv.ico"));                                         tritem.setimage(image);                                      }                                     else{                                         image image = new image(display,resourceloader.load("/images/unx.ico"));                                         tritem.setimage(image);                                      }                                 }                             }                             }                             log.info("universe tree populated.");                             sl.topcontrol =universe;                             main.layout();                         }else                         {                             log.info("unable create enterprise session");                             messagebox messagebox = new messagebox(shell, swt.icon_warning | swt.ok);                              messagebox.settext("report extractor");                             messagebox.setmessage("unable create enterprise session provided credentials.  please verify it.");                             messagebox.open();                         }                      }                     catch(exception exp)                     {                          log.error("fail create enterprise session",exp);                     }                  }             });               display.getdefault().asyncexec(new runnable()             {                 @override                 public void run()                 {                     if (!progressbar.isdisposed())                         progressbar.setvisible(false);                 }             });         }     } }).start(); 


Comments