1

を使用したいくつかの実験と一緒にJavafxアプリケーションを実行しています。Apache FelixiPOJO

まず、別のクラスでメソッドを呼び出してから、次のようなものApplication.launch()を含む別のクラスを開始します。iPOJO @Requires

public class JavafxApp extends Application {
    @Override
    public void start(Stage primaryStage){
        /* Do nothing here because I thought I can initialize JavaFX in a different class */
    }

    public static void start(){
        Platform.runLater(() -> {
            launch(JavafxApplication.class);
        });
    }
}


@Component
@Instantiate
public class MyApplication {
    @Requires
    LibraryClass class;

    @Validate
    public void start(){
        JavafxApp.start();
        class.someMethod();
    }

}

この実装はこの例外をスローしますjava.lang.IllegalStateException: Toolkit not initializedが、インターフェイスiPOJOの実装クラスが見つかりました。LibraryClass

いくつかの調査の後、アプリケーションは を拡張するクラス内にある必要があることがわかったjavafx.application.Applicationので、いくつかの再構築を行いました。

@Component
@Instantiate
public class JavafxApp extends Application {

    @Requires
    LibraryClass class;

    @Override
    public void start(Stage primaryStage){
        class.someMethod();
    }

    @Validate
    public void start(){
        launch(JavafxApp.class);
    }

}

編集

LibraryClassインターフェイスと実装:

@Component
@Provides
@Instantiate
public class LibraryClassImplementation implements LibraryClass {

    public void someMethod(){
        system.out.println("Hello Javafx using iPOJO");
    }

}

public interface LibraryClass {
    public void someMethod();
}

これで、iPOJOが aをスローしRuntimeException、 が にLibraryClassなりnull、アプリケーションが a をスローしNullPointerExceptionます。

私の質問は次のとおりです。

  • iPOJOこの状況で使用することは可能ですか?
  • アプリケーションで使用iPOJOする正しい方法は何ですか?JavaFX

前もって感謝します!:D

4

1 に答える 1