阅读更多

19顶
13踩

编程语言

原创新闻 Smartrcp——Adobe AIR以外的另一选择

2010-05-05 10:05 by 见习记者 smartinvoke 评论(47) 有20398人浏览

项目背景:

 

      笔者曾经做过Adobe AIR的开发,深感其之不爽,无多线程支持,不能调用其他语音开发 的dll,扩展性非常差。所以经过一年多的时间开发了smartrcp平台,将Java与Flex整合于同一桌面程序中,使用Java与Flex开发桌面程序。Java负责后台逻辑,Flex负责界面显示。Java与Flex通过flash player接口实现进程内同步通信。

SmartRCP是什么


SmartRCP是一个使用Java与Flex 编写高度可扩展可配置可裁剪的桌面程序的开发平台。
它继承了java与flex的优势,并扬长避短,将它们的优势发挥得淋漓尽致。
整个系统构建在eclipse 插件体系之上,所以可以与现有的eclipse 插件体系融合;
同时充分利用flex module的优势,使整个程序的界面开发更具扩展性与配置性。

 

 

项目地址:http://code.google.com/p/smartrcp/

 

SmartRCP的目标


    保证SmartRCP平台的高扩展性
    保证SmartRCP平台的跨平台性
    保证SmartRCP程序开发的便捷性与高效性

 

SmartRCP运行环境

     1:jre1.6以上

    2:flash player activex版

SmartRCP的优势


项目经理:


使用SmartRCP,可以缩短项目开发周期与开发成本
使用SmartRCP,可以将项目逻辑部分与GUI部分媾和降到最低易于项目的维护与扩展
通过SmartRCP的接口机制,Java程序员与Flex程序员可以并行开发互不影响
SmartRCP的模块通信机制可以很好的实现模块重用

Java程序员:


用SmartRCP开发桌面程序开发效率非常高,界面美观
我再也可以不用开发效率低运行缓慢的swing做界面开发了
SmarRCP依靠Flex做的界面非常漂亮很不错
依靠Java做后端服务,功能非常强大,比Adobe AIR程序更具扩展性和维护性
把界面设计部分交给Flex程序员与美工,我可以专注于程序业务逻辑部分

Flex程序


用SmartRCP开发桌面程序开发效率非常高,界面美观,而且功能非常强大
Flex调用Java就像调用本地代码一样方便
将复杂业务逻辑交由Java处理我们可以专注于界面开发,分工明确
SmartRCP开发框架对Flex的模块机制支持非常好,代码重用与维护性高

SmartRCP对Flex模块的载入和销毁机制,很好的解决了Flex内存不易释放 的问题

 


大家有什么疑问可以在 http://smartrcp.group.iteye.com/  圈子进行讨论,我会及时的回复的

 

 

 完整版下载地址(包含JRE):

 

   http://smartinvoke.googlecode.com/files/smartrcp_1.0.a_20100429All.rar

 

 精简版下载地址(无JRE):

 

   http://smartrcp.googlecode.com/files/smartrcp_1.0.a_20100429.rar

 

smartrcp需要jre1.6以上的支持。

 

smartrcp开发入门系列:

 

   smartrcp开源平台使用Java与Flex构建桌面程序 一(smartrcp版hello world)

 

   smartrcp开源平台使用Java与Flex构建桌面程序 二(快速搭建程序整体布局)

 

   smartrcp开源平台使用Java与Flex构建桌面程序 三(使用eclipse插件扩展smartrcp平台)

 

   smartrcp开源平台使用Java与Flex构建桌面程序 四(smartrcp的运行原理)

 

运行示例程序:

 

  下载并解压smartrcp后,打开windows控制台,切换到解压smartrcp.exe所在的目录,运行

 

smartrcp.exe -app http://smartrcp.googlecode.com/svn/org.smartrcp.demo/src/Splash.swf

 命令就可以打开示例程序了,如下图:

 

 

 

 

smartrcp运行原理:

 

smartrcp的程序结构如下:

 

    

图片说明:

 

启动文件:继承自cn.smartinvoke.gui.SplashApp的mxml Application文件编译后
               所得的swf文件。该文件有点儿像eclipse插件中的plugin.xml文件的作用,
              它定义了整个应用程序的基本信息;菜单工具栏;与整体布局。

应用程序文件:继承自cn.smartinvoke.gui.RCPApplication的mxml Application文件编译后
                    所得的swf文件。该文件的主要作用是保存全局运行库,程序全局样式,嵌入资源等等
                    资源。Flex模块都是通过它进行加载的。


模块:可以被独立加载与运行的软件单元,在smartrcp平台中,模块可以为:

      
      1:继承自RCPModule的mxml Module,它的最终发布形式为编译后的swf文件。
      2:继承自cn.smartinvoke.gui.RCPApplication的mxml Application,它的最终发布形式
         也为编译后的swf文件。
      3:实现cn.smartinvoke.smartrcp.core.ISWTPartUnit接口的Java类。通过它实现的
         public void createPartControl(Composite parent)方法可以定义界面显示。此类型
         的模块为Java语音实现,通过ViewManager类实现与Flex实现模块的互调。它的最终发布
         形式为java的jar文件。通过它可将Java与Flex界面整合到一个程序中。
     
     smartrcp平台为每个运行的模块生成唯一ID号,同时创建一FlashViewer类型对象用于对相应模块的访问。
     smartrcp规定:所有模块定义类的public方法都可以被其他模块访问到。
     smartrcp保证所有运行的模块都有一FlashViewer类型对象与其对应,通过唯一ID号进行区分。
     ViewManager类专门负责对所有FlashViewer类型对象进行管理。不同模块实例之间的调用都是通过调用
     调用ViewManager的对应方法实现的。

  
smartrcp运行原理:

1:  smartrcp在启动时获取-app参数值作为启动文件,该值必须为一有效的
     swf文件绝对路径,该路径可以为本地文件路径,也可以是一完整的http
     地址。smartrcp通过调用该swf文件得到如下信息:

   
      1.1 应用程序根目录——当前smartrcp程序的运行目录,程序中的所有相对路径都是相对于该路径的。
      1.2 运行文件——启动文件所在类即cn.smartinvoke.gui.SplashApp子类的cn.smartinvoke.rcp.CPerspective类的runtimeSwfPath属性所指的swf文件。


2:通过解析启动文件返回的cn.smartinvoke.rcp.CPerspective类型对象定义整个程序的菜单;工具栏; 视图布局,窗口   大小,标题等应用程序信息。


3:通过第二步解析得到的视图布局信息加载指定的模块以初始化整个应用程序。

开发smartrcp程序就是开发不同的模块,主要是针对模块编程。smartrcp的这种架构特点充分保证了程序的高扩展性与可维护性。充分保证了模块的复用性,因为可以将一模块编译为独立的flex application或osgi bundle Jar文件。smartrcp的模块功能与com组件比较类似。

 

 

19
13
评论 共 47 条 请登录后发表评论
27 楼 287854442 2010-05-06 07:05
啥都不说了,赞一个吧! 哥也是用Flex+java开发的,很不错。有空用下你这个smartrcp
26 楼 modun 2010-05-06 01:31
多支持国人写的东西吧,不支持,也不要打击别个!
25 楼 cjx186 2010-05-06 00:35
smartrcp 这几天老在这里闪。我晕。看得都烦了。我早看过这东西了。不好!<-个人意思。
24 楼 atian25 2010-05-05 22:46
js无法debug --- 不认同...
23 楼 javagui 2010-05-05 22:12
如果不要求 超绚 的应用,swing足够了。而且性能比flex快不少。
smartrcp开发应用,部署完的体积考虑过么
22 楼 smartinvoke 2010-05-05 17:42
当初开发smartrcp的目的是:
1:代替Adobe AIR
2:可以让Java开发人员开发出漂亮的桌面程序

smartrcp开发团队会朝着这两个目标奋斗的,我们要让老美看看。我们
做出的东西比他们的更好。


我曾经用Adobe AIR开发过桌面程序,现在想来,
只能用不堪回首来形容,Adobe AIR的优势我就不说了,这里
主要说说它不足的地方:
1:内存消耗严重,它的内存好像不会回收,随着打开界面的增加,内存也
跟着增加。
2:界面响应速度很慢的
   特别是需要很多逻辑的稍微大点儿的应用,你会明显感觉,界面响应速度
非常的慢。就一个线程,既要加载数据又要显示界面,不慢才怪。
3:用js来开发AIR程序,出发点就是一个错误,js无法debug,语法多变,不能
  用于大规模的应用开发,因为那样的话维护将是一场噩梦。
4:与现行的平台不能无缝集成。
   一个成功的桌面程序开发平台必须要能与其他平台很好的集成,这也是ms能成功
  的原因。

所以我说Adobe AIR有点儿万恶。
21 楼 zhangzcz1999 2010-05-05 17:41
貌似不错~
关注~
20 楼 isno 2010-05-05 14:32
文章啊, 不是新闻
19 楼 smartinvoke 2010-05-05 14:07
dualface 写道
感觉这个项目技术上是行得通,但是市场恐怕不好接受。

Flex本身就不够成熟,比如窗口管理、输入焦点管理这些。虽然弄到Java里面去可以让开发者利用一大堆Java的第三方库,实现多线程等功能,但Flex本身的毛病还是没法用Java来解决的。

而且用了Flash ActiveX,就注定无法跨平台。那我觉得还不如直接用.NET好了,开发客户端的效率是Java+Flex的组合无法比拟的。


的确flex不是很成熟,内存管理是最大的问题。但flex是同类型平台中(ms sl,
javaFX)中最成熟的。
smartrcp让每个flex模块都运行于独立的flash player容器中。有效的解决了内存的问题。

smartrcp是跨平台的,它对flash访问部分做了抽象,只要有flash与eclipse的系统中,就可以有smartrcp的身影。
18 楼 smartinvoke 2010-05-05 14:00
红四团 写道
AIR是一个桌面运行时,smartrcp是一个开发框架,两者不是一码事。

smartrcp是一个开发框架更是一个运行环境,通过命令行-app 参数可以启动不同的
smartrcp应用
17 楼 dualface 2010-05-05 13:37
感觉这个项目技术上是行得通,但是市场恐怕不好接受。

Flex本身就不够成熟,比如窗口管理、输入焦点管理这些。虽然弄到Java里面去可以让开发者利用一大堆Java的第三方库,实现多线程等功能,但Flex本身的毛病还是没法用Java来解决的。

而且用了Flash ActiveX,就注定无法跨平台。那我觉得还不如直接用.NET好了,开发客户端的效率是Java+Flex的组合无法比拟的。
16 楼 pengzeng 2010-05-05 13:19
wangzaixiang 写道
S-B,改什么标题啊


你这种人就是典型的市井小民,楼主发布smartrcp开发平台,你想用就用,
不用你自己去折腾,与你何干。

专门以贬低别人为自己的快乐,你这辈子也不会有什么成就。

还是管好你那一亩三分地儿,不要再出来丢人了
15 楼 红四团 2010-05-05 12:47
AIR是一个桌面运行时,smartrcp是一个开发框架,两者不是一码事。
14 楼 wangzaixiang 2010-05-05 12:27
S-B,改什么标题啊
13 楼 夜之son 2010-05-05 11:58
还处在隔岸观火阶段,不好意思。等稳定了我在研究。
12 楼 atian25 2010-05-05 11:56
框架不错,可惜就是新闻标题太哗众取宠了
11 楼 mblmh2008 2010-05-05 11:40
phenom 写道
这也算是新闻,也能审得过?

可能这也算新闻吧。
10 楼 liuwei2630 2010-05-05 11:27
不支持多线程的确是个遗憾,不过他的事件机制可以很好的补充。
9 楼 Xorcerer 2010-05-05 11:15
fansofjava 写道
这个有什么通不过的理由?为什么总是有那么些人看不起国人自主开发的软件?

问题是这个标题,有哗众取宠的嫌疑,感觉是自己先看不起自己才用这样的方式来吸引眼球。
当然,我只是猜。
8 楼 Puras 2010-05-05 11:13
这“新闻”真好

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

Global site tag (gtag.js) - Google Analytics