我目前正在使用JavaFX
执行大型Apache Felix
应用程序,并怀疑在启动过程中该做什么。我做了一些实验,发现了在JavaFX
环境中启动OSGi
的两种可能方法。
第一种方法是通过执行某种JFXPanel()
来使用JavaFX bootstrap
。我没有嵌入Swing Applications
这是初始化JavaFX Thread
。
public class JavaFXEnvironment {
public static void start(){
return new JFXPanel();
}
}
我只需致电JavaFXEnvironment.start();
,然后在JavaFX
中使用我的Activator Bundle
应用程序的启动方法。
Platform.runlater(() -> {
new SampleApplication.start();
});
第二种方法是使用Application.start()
方法。
public class SampleApplication extends Application {
public void start(Stage stage) {
... /* Do JavaFX stuffs in here */
}
}
然后在Application.launch(...)
中调用Activator Bundle
。
使用其中一种方法会产生什么影响?
即使我没有嵌入Swing Applications
,使用JFXPanel也有任何不足之处吗?
答案 0 :(得分:0)
我建议使用Application.launch,例如。在声明服务或激活器中启动它。你必须开始一个新的线程,因为这个呼叫是阻塞的。
使用JFXPanel会将Swing添加到混合中,可能还会添加Swing Event Dispatch Thread(EDT)。
请注意,我已经发布了一些早期版本的Drombler FX,这是一个基于OSGi(Apache Felix)和Maven(POM优先)的JavaFX新模块化应用程序框架。
您可以在此处详细了解Drombler FX:http://puces-blog.blogspot.ch/search/label/Drombler
这是一个Getting Started页面,通过几个简单的步骤解释了如何创建,构建和运行Drombler FX示例应用程序。