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

Java 在应用程序关闭时运行代码,java,eclipse-plugin,Java,Eclipse Plugin,这又是一个非常常见的问题,而且似乎E4中没有真正的支持(但如果我没记错的话,它在E3中也不起作用) 我想在应用程序关闭时关闭数据库连接。或者更一般地说:我想在出口处进行任何形式的清理 因此,通常的API是: public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { public ApplicationWorkbenchWindowAdvisor(final IWorkbenchWind

这又是一个非常常见的问题,而且似乎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();
    }
}
问题:对于RCP应用程序,这个钩子被称为way,way,way-too-late,例如,所有插件都已经关闭了

我觉得一定有一个简单的方法,我只是还没有找到。如果这很重要的话,我们正在使用较小的邪恶Eclipse(又名E3兼容性)


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

使用
IWorkbench::addWindowListener
IWorkbench::addWorkbenchListener
在工作台窗口关闭或工作台关闭时获得通知


您也可以考虑从包的<代码>停止/代码>方法运行清理代码。

您是否尝试了<代码> iWorkStay::AddiWoDOWListNe<代码>或<代码> iWorkStay::AddiWorkBistListor <代码>?如果这些方法不可靠,您可以考虑从包的<代码>停止>代码>中运行清理代码。对不起,我只能在这里猜测…@Rüdigerrmann不,我没有试过这些。两者似乎都起作用。所以我想这就是答案。
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
    Datababase.close();
}));