を使用したいくつかの実験と一緒にJavafx
アプリケーションを実行しています。Apache Felix
iPOJO
まず、別のクラスでメソッドを呼び出してから、次のようなもの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