`
continentlu
  • 浏览: 11248 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

基于OSGI框架的javaFx C/S应用开发相关

    博客分类:
  • OSGI
阅读更多

 

 

简述:

 

在OSGI框架中开发JAVAFX的C/S应用,主要处理点为如果把javafx运行环境的相关jar与dll文件引入到OSGI的bundle中,

本次处理为把javafx的运行环境的相关文件以一个plug-in Project 的形式加入其中,在该project中把javafx的所在

jar文件中的包全部导出然后在javafx bundle的应用中引入这些包,就可以找到javafx的API了,其它是把dll放到plug-in Project

的根目录下,用于JNI的调用。具体步骤如下:

 

1:建立一个用于依赖的bundle,在myeclisep9.1中:New-->Other-->Plug-in Development-->Plug-in Project 

然后点击 next,输入一个工程名如:fxLibBundle(后续都称为fxLibBundle),在 Target Platform项中选中 an OSGI framework:下拉框中选择 standard,

点击next,在Properties项中可根据情况输入,也可默认,在Options项中取消 Generate an activator,...复选框。

点击next,取消 Create a Plug-in using one of the templates复选框,点击Finish完成插件工程建立向导。

 

2:在fxLibBundle的根目录中新建一个lib目录,用于存放jar文件,复制JavaFX Runtime 2.0\lib\jfxrt.jar到刚建的lib目录中,

复制JavaFX Runtime 2.0\bin所有的*.dll文件到fxLibBundle的根目录中。打开fxLibBundle工程中/META-INF/MANIFEST.MF文件,

切换到Runtime选项卡中,在Classpath项中点击Add按钮,定位到刚建立的lib目录中的jfxrt.jar文件,选中它然后点击ok按钮完

成jar加到Classpath的操作,然后在Classpath左边的Exported Packages项中,点击Add按钮,在弹出来的对话框中,包括了javafx

所有的包,全选后点击OK完成包的导出。

 

3:在javafx bundle应用中,打开其META-INF/MANIFEST.MF文件,切换到Dependencies选项卡中,在Required Plug-ins项中点击

Add按钮,在Slect a Plug-in输入框中可输入fxLibBundle来查找,找到后,选中它点击ok即可,接下来在Dependencies选项卡中的

Imported Packages项中点击Add按钮,选择在你的javafx bundle中用到的javafx包,选择完后占击OK完成包的导入。

 

4:右键你的javafx bundle,Run As-->Run Configurations 在打开的运行对话框中的左侧,双击(或右键)OSGI Framework菜单

新建一个OSGI Framework运行项,在右边出现的Bundles树形中,选择fxLibBundle与自身,在bundles树形右边点击Add Required Bundles

按钮,然后点击Apply按钮,再点击Run按钮运行应用。到此,基于OSGI的javafx应用操作步骤已全部完成。

 

 

可能会出现的问题:

。。。。java.lang.UnsatisfiedLinkError。。。。异常:

由于javafx引用不到其需要的dll或版本不对的原因引起。

解决:确定所用的javafx版本与fxLibBundle用的一致,确定dll都在fxLibBundle工程的根目录中。

 

 

在javafxbundle开发配置完成后,目前如何启动javafx bundle应用与更新、停止却又出现了问题。这些问题会在后续进一步进行解决,目前已

有解决的思路,等待测试。

 

续解决办法:

 

在启动javafx时不能直接用application.launch,而需要用如下代码启动:

 

PlatformImpl.startup(new Runnable() {  

public void run() {  

Stage stage = new Stage();

stage.setTitle("OSGI javaFx bundle");

stage.centerOnScreen();

//Scene scene = makeScene();

//stage.setScene(scene);

FIX_OSGI fix_osgi = new FIX_OSGI();

fix_osgi.start(stage);

}});

 

其中 FIX_OSGI 是一个自定义类,其start 方法部分如下:

public void start(Stage st) {

...

   Scene scene = new Scene(new Group, 500, 200);

...

   stage.setScene(scene);

...

}

这样启动后,对于javafx的bundle就可即时的更新、停止与启动了。

 

更多处理,请搜索javafx与swing整合相关资料。

 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics