描述:我想制作一个不阻塞线程的弹出框,所以自定义了一个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
提交
取消