初始化时关闭JFace窗口

时间:2011-07-16 16:09:43

标签: java jface

我有一个带有文件列表的JFace应用程序。当用户单击列表中的文件时,将打开子窗口。子窗口自动将文件内容加载到文本小部件中。

加载文件内容可能会失败。我可以检测到这种情况,我很乐意关闭子窗口,然后才能在屏幕上显示。

我尝试在子窗口的重写close()方法结束时调用protected Control createContents(Composite parent)。但是我在JFace库中的某个地方得到了一个null异常:

Exception occurred java.lang.NullPointerException
at org.eclipse.jface.window.Window.initializeBounds(Window.java:758)
at org.eclipse.jface.window.Window.create(Window.java:435)
at org.eclipse.jface.window.Window.open(Window.java:790)

使用初始值初始化窗口小部件的正确位置在哪里?理想情况下,我认为它应符合条件:

  • 小部件应该已经由框架创建。
  • 窗口不应该显示。
  • 如果需要,
  • close()应正确关闭窗口。

1 个答案:

答案 0 :(得分:0)

如果Window对象还没有窗口shell,open()方法会创建一个新窗口并打开它。当调用create()时,它在createContents(Composite parent)方法中,以及配置一些视觉细节的其他方法。这是initializeBounds()方法,它依赖于已经存在的shell。如果你关闭它,你就去了,你得到了例外。

也许您想要覆盖open()方法本身:

public int open() {
   if (!condition)
        return super.open();    // as usual
    else
        return CANCEL;
}