运行 应用程序关闭时的代码
Run Code On Application Close
这又是一个非常常见的问题,而且似乎在 E4 中没有真正的支持(但如果我没记错的话,它在 E3 中也不起作用)。
我想在应用程序关闭时关闭我的数据库连接。或者更笼统:我想在退出时进行任何类型的清理。
所以通常的 API 是:
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(final IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
@Override
public boolean preWindowShellClose() {
if (PlatformUI.getWorkbench().getWorkbenchWindowCount() <= 1) {
// the last window is about to close
Datababase.close();
}
return super.preWindowShellClose();
}
}
问题?它不会在每次应用程序关闭时调用,尤其是在 PlatformUI.getWorkbench().close();
上(即使 JavaDoc 声称此方法会关闭 windows)。
(如果您想测试此声明是否正确,只需使用 ExitHandler
关闭您的应用程序 - 然后不会调用 preWindowShellClose()
。)
我可以创建自己的处理程序并再次手动调用清理方法,但我希望有更好的方法。
您可以对应用程序关闭做出反应的另一种方式是 Shutdown Hooks API:
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
Datababase.close();
}));
问题:对于 RCP 应用程序,这个钩子调用方式太晚了,例如届时所有插件都已关闭
我觉得一定有一个简单(而且有效)的方法,只是我还没有找到。如果它很重要,我们正在使用 Lesser Evil Eclipse(又名 E3 兼容性)。
如何在应用程序关闭时运行编写代码?
使用 IWorkbench::addWindowListener
或 IWorkbench::addWorkbenchListener
在 workbench window 关闭或 workbench 关闭时收到通知。
您也可以考虑 运行 捆绑包的 stop
方法中的清理代码。
这又是一个非常常见的问题,而且似乎在 E4 中没有真正的支持(但如果我没记错的话,它在 E3 中也不起作用)。
我想在应用程序关闭时关闭我的数据库连接。或者更笼统:我想在退出时进行任何类型的清理。
所以通常的 API 是:
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(final IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
@Override
public boolean preWindowShellClose() {
if (PlatformUI.getWorkbench().getWorkbenchWindowCount() <= 1) {
// the last window is about to close
Datababase.close();
}
return super.preWindowShellClose();
}
}
问题?它不会在每次应用程序关闭时调用,尤其是在 PlatformUI.getWorkbench().close();
上(即使 JavaDoc 声称此方法会关闭 windows)。
(如果您想测试此声明是否正确,只需使用 ExitHandler
关闭您的应用程序 - 然后不会调用 preWindowShellClose()
。)
我可以创建自己的处理程序并再次手动调用清理方法,但我希望有更好的方法。
您可以对应用程序关闭做出反应的另一种方式是 Shutdown Hooks API:
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
Datababase.close();
}));
问题:对于 RCP 应用程序,这个钩子调用方式太晚了,例如届时所有插件都已关闭
我觉得一定有一个简单(而且有效)的方法,只是我还没有找到。如果它很重要,我们正在使用 Lesser Evil Eclipse(又名 E3 兼容性)。
如何在应用程序关闭时运行编写代码?
使用 IWorkbench::addWindowListener
或 IWorkbench::addWorkbenchListener
在 workbench window 关闭或 workbench 关闭时收到通知。
您也可以考虑 运行 捆绑包的 stop
方法中的清理代码。