gpt4 book ai didi

java - 在应用程序关闭时运行代码

转载 作者:行者123 更新时间:2023-11-30 02:18:15 25 4
gpt4 key购买 nike

这又是一个非常常见的问题,而且 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 声称此方法会关闭窗口)。

(如果您想测试此声明是否正确,只需使用 ExitHandler 关闭您的应用程序 - 然后不会调用 preWindowShellClose()。)

我可以创建自己的处理程序并再次手动调用清理方法,但我希望有更好的方法。

对应用程序关闭使用react的另一种方式是 Shutdown Hooks API :

Runtime.getRuntime().addShutdownHook(new Thread(() -> {
Datababase.close();
}));

问题:对于 RCP 应用程序,此钩子(Hook)调用 way, way, way 太晚了,例如此时所有插件都已关闭。

我觉得一定有一种简单(且有效)的方法,只是我还没有找到。如果这很重要,我们将使用 Lesser Evil Eclipse(又名 E3 兼容性)。

应用程序关闭时如何运行代码?

最佳答案

使用 IWorkbench::addWindowListenerIWorkbench::addWorkbenchListener 在工作台窗口关闭或工作台关闭时收到通知。

您还可以考虑从 bundle 的 stop 方法运行清理代码。

关于java - 在应用程序关闭时运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47627889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com