在我的应用程序中,我想弹出一个在其构造函数中带有WizardDialog
参数的JFACE shell
。
我尝试以两种不同的方式获取shell:
Shell shell = new Shell(display);
Shell shell = display.getActiveShell();
两种方式似乎都很好,因为他们创造了一个很好的模态对话。 我的问题是,哪一个是正确的?
实例化一个新shell是有意义的,但是如果活动shell有效,我为什么要这样做呢?
答案 0 :(得分:1)
传递给WizardDialog的Shell是它的父shell ,例如控制将在哪个监视器上显示对话框。父shell对对话框生命周期也有影响。如果父shell关闭,它的所有子shell也会关闭(见下文)。
该对话框不使用此shell来创建其内容。因此将创建一个新的shell。
因此,您不应创建新shell但使用现有shell。 display.getActiveShell()
适用于大多数情况,但我建议使用众所周知的 shell。
在Eclipse工作台应用程序(RCP或Eclipse IDE插件)中打开对话框时可能存在陷阱:display.getActiveShell()
如果恰好在当时打开,则可以返回进度监视器对话框向导已打开,并在完成进度报告时意外关闭向导对话框。活动工作台窗口通常是一个很好的选择。