0
20
18
07
为了账号安全,请及时绑定邮箱和手机立即绑定

SWT 从线程中打开一个Shell的问题(在子线程中无法开启一个新的shell)

SWT 从线程中打开一个Shell的问题(在子线程中无法开启一个新的shell)

守候你守候我 2019-03-13 18:15:54
描述:我想制作一个不阻塞线程的弹出框,所以自定义了一个Dialog,继承Dialog并实现Runnable接口。将display作为参数传入后,获得parent shell,并实例化child shell,以此shell创建dialog。/**     * Create the dialog.     * @param parentShell     */    private ShowLoadingDialog(Shell parentShell) {        super(parentShell);                    this.shell = parentShell;        this.display = shell.getDisplay();        label = new Label(shell, SWT.NONE);    }        public static ShowLoadingDialog getDialog(Display display){        Shell shell = new Shell(display,SWT.TITLE | SWT.BORDER|SWT.APPLICATION_MODAL);        return new ShowLoadingDialog(shell);    }定义一个open方法,当调用此方法时,会执行自身这个Runnable对象,我把shell的open放在了线程中启动,当收到关闭shell的通知时(isShow),结束线程@Override    public void run() {        // TODO Auto-generated method stub                            if(this.show){                display.syncExec(new Runnable() {                                        @Override                    public void run() {                        // TODO Auto-generated method stub                        shell.open();                        shell.layout();                        while  ( ! shell.isDisposed() && isShow) {                                  if  ( ! display.readAndDispatch()) ;                                 display.sleep();                           }                      }                });            }    }Q1: 为什么无论我使用syscExec方法还是asyscExec方法,都无法显示出dialogQ2:为什么将shell的open方法调用从run中移出来调用时,能显示出dilog但是程序会失去响应(dialog的样式和坐标我已经在别的方法中设置好了,无需考虑着一点)
查看完整描述

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号