在 JavaFX 应用程序中使用 iPOJO



我正在Apache Felix中做一个Javafx应用程序,以及一些使用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 initializediPOJO找到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抛出一个RuntimeExceptionLibraryClass变得null,应用程序抛出一个NullPointerException

我的问题是:

  • 在这种情况下可以使用iPOJO吗?
  • 如果是在JavaFX应用程序中使用iPOJO的正确方法是什么?

提前感谢! :D

JavaFX 应用程序实例必须由 JavaFX 平台使用 Application 类的静态启动方法之一创建。 AFAIK 其他框架(如 iPOJO)不可能实例化该类。但是,在第二个实现中,您已经使用一些iPOJO(?)注释注释了应用程序,我猜这将创建该类的实例。但它是启动方法,它应该创建应用程序实例,而不是框架。

在第一个实现中,您尝试在 JavaFX 应用程序线程中调用启动方法。但它是启动JavaFX平台和JavaFX应用程序线程的启动方法。另请注意,在应用程序退出之前,启动方法不会返回。

也就是说,请注意,我已经发布了一些Drombler FX的抢先体验版本,这是一个基于OSGi(Apache Felix)和Maven的JavaFX新富客户端平台。

作为一个应用程序框架,它确保JavaFX和OSGi能够正确启动,并提供主窗口。

您可以在此处阅读有关Drombler FX的更多信息:http://puces-blog.blogspot.ch/search/label/Drombler

到目前为止,我正在使用声明性服务(从Apache Felix SCR注释生成),但我想也应该可以将iPOJO用于新服务。

有一个入门页面,其中解释了如何通过几个简单的步骤创建、构建和运行 Drombler FX 示例应用程序。

相关内容

  • 没有找到相关文章

最新更新