运行 JavaFX 应用程序:JFXPanel 与 Application.launch

Running JavaFX Applications: JFXPanel vs Application.launch

我目前正在使用 Apache Felix 做一个大型 JavaFX 应用程序,并且对在启动过程中要做什么有疑问。我做了一些实验,发现了在 OSGi 环境中启动 JavaFX 的 2 种可能方法。

第一种方法 是通过JavaFX bootstrap 使用JFXPanel()。我不是嵌入 Swing Applications 这是为了初始化 JavaFX Thread.

public class JavaFXEnvironment {
    public static void start(){
        return new JFXPanel();
    }
}

我会调用 JavaFXEnvironment.start(); 然后在 Activator Bundle.

中使用我的 JavaFX 应用程序的启动方法
Platform.runlater(() -> {
    new SampleApplication.start();
});

第二种方法是使用Application.start()方法。

public class SampleApplication extends Application {
     public void start(Stage stage) {
         ... /* Do JavaFX stuffs in here */
     }       
}

然后在Activator Bundle中调用Application.launch(...)

使用其中一种方法会产生什么影响?

即使我没有嵌入,使用 JFXPanel 时是否有任何缺点 Swing Applications

我建议使用 Application.launch,例如。在声明式服务或激活器中启动它。您将不得不启动一个新线程,因为调用正在阻塞。

使用 JFXPanel 会将 Swing 添加到组合中,可能还会添加 Swing 事件调度线程 (EDT)。

请注意,我已经发布了 Drombler FX 的一些抢先体验版本,这是一种基于 OSGi (Apache Felix) 和 Maven(POM-first)的 JavaFX 新模块化应用程序框架。

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

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