1

我正在做一个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();
}

现在iPOJOthrows aRuntimeExceptionLibraryClassbecomenull并且应用程序抛出 a NullPointerException

我的问题是:

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

提前致谢!:D

4

1 回答 1

0

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 Annotations生成),但我想也应该可以将 iPOJO 用于新服务。

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

于 2015-02-10T08:55:17.123 回答