【发布时间】:2014-04-06 01:23:57
【问题描述】:
如何实现 IWindowCloseHandler 以便在关闭应用程序之前显示 MessageDialog ?
这是我的代码:
编辑
public class LifeCycle {
@PostContextCreate
public void postContextCreate()
{
// TODO start up code here
System.out.println("open");
}
@ProcessAdditions
void processAdditions(MApplication app, EModelService modelService)
{
WindowCloseHandler closeHandler=new WindowCloseHandler();
MWindow window = (MWindow)modelService.find("uploadcenter.source.trimmedwindow.0", app);
window.getContext().set(IWindowCloseHandler.class, closeHandler);
}
private static class WindowCloseHandler implements IWindowCloseHandler{
@Override
public boolean close(MWindow window) {
// TODO Auto-generated method stub
Shell shell = new Shell();
if (MessageDialog.openConfirm(shell, "Confirmation",
"Do you want to exit?")) {
return true;
}
return false;
}
}
}
伊斯梅尔
【问题讨论】:
-
如果这是一个纯e4应用你不能使用PlatformUI。
-
好的 @greg-449,我现在可以更好地理解 e4 RCP 应用程序了。所以,在我最新的编辑中,我使用
EModelService和MApplication来查找我的应用程序的主窗口,我的窗口位于processAddictions()。 LifeCycle 类位于plugin.xml中。现在,我只需要将窗口传递给close方法,但我不能,最后一步我缺少什么? -
正如我已经说过的,您将
IWindowCloseHandler放在窗口上下文中,Eclipse 将在需要时调用close方法。您必须等到应用启动事件触发后才能将条目放入上下文中。我已更新答案以匹配您的代码 -
我看不到你的更新(抱歉),我猜我在编辑的同时。我也添加了新的修改。 . .我在这里得到
NullPointerException:window.getContext().set(IWindowCloseHandler.class, closeHandler);。我的新编辑是否正确?为什么我收到NullPointerException? .再次抱歉没有看到您的修改 -
调用
@ProcessAdditions时上下文尚未设置,您必须在应用启动完成事件中执行此操作,如我所示。
标签: java eclipse rcp e4 messagedialog