在e4中打开多个窗口会锁定以前的窗口

时间:2015-03-05 10:30:01

标签: java swt rcp e4

我正在使用E4和SWT构建应用程序。对于按钮单击,有时会打开一个新窗口(shell)。问题是当我打开一个新窗口时,我无法使用其他窗口,从某种意义上说,它已被锁定。除非我关闭最新窗口,否则无法访问其他窗口。这使得调试有点困难。我不确定这是否是由e4模型或SWT框架引起的。 你能告诉我为什么会这样,以及如何克服这个问题?

提前致谢。

2 个答案:

答案 0 :(得分:0)

我在创建新窗口(MWindow)并将其添加到perpective(MPerspective)之前遇到过此问题。如果这是你正在做的,那么你有两个选择:

  1. 将新窗口添加到应用程序(MApplication)而不是透视

  2. 将标记IPresentationEngine.WINDOW_TOP_LEVEL添加到新窗口。 (有关更多信息,请参阅:https://bugs.eclipse.org/bugs/show_bug.cgi?id=441251

  3. (2)的附加信息:如果您还希望窗口可以最小化并且在Windows任务栏中有图标表示,则可以使用以下设置来配置渲染器

    MWindow window = modelService.createModelElement(MTrimmedWindow.class);
    window.getTags().add(IPresentationEngine.WINDOW_TOP_LEVEL);         
    window.getPersistedState().put(IPresentationEngine.STYLE_OVERRIDE_KEY, "" + SWT.SHELL_TRIM);
    

答案 1 :(得分:0)

我发现了什么问题。 shell创建错误,因为我使用的是APPLICATION_MODAL位:

shell = new Shell(Display.getCurrent(), SWT.TITLE | SWT.CLOSE | SWT.MAX | SWT.SHELL_TRIM | SWT.APPLICATION_MODAL | SWT.YES | SWT.NO);

必须是PRIMARY_MODAL:

shell = new Shell(Display.getCurrent(), SWT.TITLE | SWT.CLOSE | SWT.MAX | SWT.SHELL_TRIM | SWT.PRIMARY_MODAL | SWT.YES | SWT.NO);

感谢您的帮助。