Spring Boot - Невозможно для приложения JavaFX реализовать SmartLifeCycle? - PullRequest
0 голосов
/ 21 мая 2019

Я создаю приложение JavaFX и хочу, чтобы оно реализовало интерфейс SpringLiteCycle для выполнения задач после завершения работы основного класса.Основной класс JavaFX должен расширять класс Application, который содержит метод stop ().Интерфейс SmartLifeCycle также содержит метод остановки.Похоже, что эти 2 метода отказываются сосуществовать, даже если у них разные сигнатуры методов.Метод JavaFX, расширенный из класса Application, не имеет параметров и выдает исключение, в то время как реализованный метод из SmartLifeCycle принимает объект Runnable в качестве аргумента.

Возможно ли, чтобы оба этих метода существовали в одном классе?И то, и другое требуется реализовать подклассами, поэтому компилятор жалуется, что бы я ни делал.

Спасибо

1 Ответ

1 голос
/ 21 мая 2019

Абстрактный класс Application имеет следующий метод:

public void stop() throws Exception {}

А интерфейс SmartLifecycle имеет следующий метод, унаследованный от Lifecycle:

void stop();

AsВы можете видеть, один может бросить Exception, а другой нет.Если вы хотите расширить Application и реализовать SmartLifecycle, то у вас не может быть throws Exception в вашем переопределенном методе stop().

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 в этой ситуации).

...