java - SWT 从线程中打开一个Shell的问题(在子线程中无法开启一个新的shell)
PHP中文网
PHP中文网 2017-04-18 09:40:45
[Java讨论组]

描述:我想制作一个不阻塞线程的弹出框,所以自定义了一个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方法,都无法显示出dialog
Q2:为什么将shell的open方法调用从run中移出来调用时,能显示出dilog但是程序会失去响应
(dialog的样式和坐标我已经在别的方法中设置好了,无需考虑着一点)

PHP中文网
PHP中文网

认证0级讲师

全部回复(1)
ringa_lee

我已经找到解决的办法了,忘了更新:
关于在使用Java的SWT开发UI时UI总是发生卡死的情况及解决办法

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号