我有一个带有文件列表的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()
应正确关闭窗口。答案 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;
}