UI中的UI冻结

时间:2015-07-17 13:05:20

标签: swt

我是SWT的新手。我正在尝试创建一个小应用程序。基本上它有两个屏幕。在第一个屏幕中,我必须获取用户凭据。它必须得到验证。如果成功,我必须查询表并构建树结构。验证和构建树都冻结了我的UI。我搜索了stackoverflow和谷歌。我有以下选项。 Display.getDefault().asyncExec()并从UI线程中作为单独的线程启动长时间运行的进程。

但我的UI仍然冻结。

当用户点击登录按钮时。我创建了一个帖子。作为第一步,我尝试使用asyncExec显示无限制的进度条。由于我必须访问Uname和密码,我必须触发另一个asyncexec并执行登录。如果成功填充树。

我触发了另一个asyncExec来关闭进度条。

我的用户界面冻结了登录点击直到树种群完成。我哪里错了。

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 to 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;

                            for (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 i =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 && i < max);

                                TreeItem Item = null;
                                if (i == 0){
                                    for (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( i < max){
                                    for (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 to create enterprise session");
                            MessageBox messageBox = new MessageBox(shell, SWT.ICON_WARNING | SWT.OK);

                            messageBox.setText("Report Extractor");
                            messageBox.setMessage("Unable to create the enterprise session with the provided credentials.  Please verify it.");
                            messageBox.open();
                        }

                    }
                    catch(Exception exp)
                    {

                        log.error("Fail to create enterprise session",exp);
                    }

                }
            });


            Display.getDefault().asyncExec(new Runnable()
            {
                @Override
                public void run()
                {
                    if (!progressBar.isDisposed())
                        progressBar.setVisible(false);
                }
            });
        }
    }
}).start();

0 个答案:

没有答案