Spring 启动 - JavaFX 应用程序无法实现 SmartLifeCycle?

Spring Boot - Impossible for JavaFX app to implement SmartLifeCycle?

我正在构建一个 JavaFX 应用程序,我希望它实现 Spring 的 SmartLifeCycle 接口,以便在主 class 终止时执行任务。 JavaFX main class 必须扩展包含 stop() 方法的 Application class。 SmartLifeCycle 接口还包含一个停止方法。看起来这两种方法拒绝共存,即使它们具有不同的方法签名。从 Application class 扩展的 JavaFX 方法没有参数并抛出异常,而从 SmartLifeCycle 实现的方法将 Runnable 对象作为参数。

这两种方法是否可以同时存在于同一个class中?两者都需要由 subclasses 实现,因此无论我做什么,编译器都会抱怨。

谢谢

Application 摘要 class 有以下方法:

public void stop() throws Exception {}

SmartLifecycle接口有如下方法,继承自Lifecycle

void stop();

如您所见,一个可以抛出 Exception 而另一个不能。如果您想扩展 Application 并实现 SmartLifecycle,那么您不能在重写的 stop() 方法中使用 throws Exception

public class MySpringJavaFxApp extends Application implements SmartLifecycle {

    @Override
    public void start(Stage primaryStage) throws Exception {
        // ...
    }

    @Override
    public void stop() {
        // ...
    }

    // other methods that need to be implemented...
}

但请注意,您 必须 覆盖 stop() 以删除 throws 子句。否则方法冲突(Application#stop 不是抽象的,因此在这种情况下尝试实现 Lifecycle#stop)。