阅读更多

19顶
13踩

编程语言

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

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

项目背景:

 

      笔者曾经做过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 条 请登录后发表评论
47 楼 fjraos 2011-08-04 09:02
现在smartrcp开发团队发展到程度了呢?
46 楼 Aaronic 2010-05-07 16:24
比PHPRPC如何?人家还跨多种平台呢
45 楼 twoheard 2010-05-07 13:19
结构图是用啥画的?
44 楼 smartinvoke 2010-05-07 13:18
croud 写道
探索精神值得鼓励,但不知道搞这东西出来干啥的
远程调用别人Adobe早就有BlazeDS、LiveCycle的解决办法了
Flex内存管理大多是编程技巧问题 不是没办法解决
smartrcp本身也是actionscript写的吧,既然这样还是得用Flash Player来跑



这个是针对桌面单机程序的。BlazeDS、LiveCycle是针对bs程序的,关注点不同。
43 楼 croud 2010-05-07 10:55
探索精神值得鼓励,但不知道搞这东西出来干啥的
远程调用别人Adobe早就有BlazeDS、LiveCycle的解决办法了
Flex内存管理大多是编程技巧问题 不是没办法解决
smartrcp本身也是actionscript写的吧,既然这样还是得用Flash Player来跑

42 楼 dawn023 2010-05-07 08:58
不看好Flex+RCP,到觉得Swing+RCP比较不错,只要开发一套组件和一套有效的UI设计工具,比这有前途。
41 楼 dualface 2010-05-06 21:37
smartinvoke 写道
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的身影。


每个模块一个独立的flash player进程?那得占多少内存啊。。。
再说内存占用只是一方面的问题,Flex最大的问题就是做出来的UI太多小bug。一会儿输入焦点丢失了,一会儿窗口层叠出问题了。

这些问题是靠外部无法解决的。根本原因在于人们给Flash这个平台赋予了太多职责。原本只是个显示动画的平台,现在非得加上一大堆与窗口管理有关的东西,不但效率没保证,成熟度也达不到要求。

我以前弄AIR,开始是觉得挺爽。默认的界面就很漂亮,而且开发起来也快。可是随着UI的复杂度增加,各种小问题就冒出来了,越到后面越折腾人。

做桌面应用还是用.NET好,又快又稳,而且能够充分发挥Windows桌面的能力。至于要实现RCP那样的远程交互,也是非常简单的事情。
40 楼 qxucc 2010-05-06 17:20
用Flash Player和Java,不都是老美的玩意吗?

再说用了FlashPlayer,性能还能好得了?
39 楼 dawn023 2010-05-06 16:00
解决了你的需求了吗?怎么解决的?
1.无多线程支持;
2.不能调用其他语音开发 的dll
3.扩展性非常差
38 楼 plutoxb 2010-05-06 15:50
不错,我也看好这个
37 楼 nwangwei 2010-05-06 15:47
        
36 楼 qssoft.cn 2010-05-06 13:40
不错.. 支持SmartRCP... 加油... 
35 楼 timshaw9791 2010-05-06 12:55
希望lz不要泄气,我们很多人都看好这个方向。加油
34 楼 janken 2010-05-06 11:34
作者加油! 从这个项目刚刚出来的时候就关注了
33 楼 xiaocheng882000 2010-05-06 10:05
人多口杂,希望作者别被影响,该怎么地就怎么地!
对个人做的研究和探索应该给予必要的尊重
一个标题而已,多点宽容
32 楼 qq123zhz 2010-05-06 09:47
可以看看。
31 楼 9527oooooo 2010-05-06 09:39
关注一下~
30 楼 smartinvoke 2010-05-06 09:19
mblmh2008 写道
请勿三番五次的把自己公司的广告贴成新闻。
这种东西在坛子里边炫炫就得了,
毕竟你公司的作品没有达到微软、苹果、谷歌那样的水平
应用范围和使用人数也没那么多。
起个吸引人的眼球的名字,然后再文章里打死渲染这玩意儿多好多好。
还发布到新闻里来就不要怕别人骂你。
骂你你就忍着,还回嘴别人是什么市井小民,那你是什么?
你市井老鼠吗?


首先申明:并非公司项目,个人业余时间的创作。
29 楼 aninfeel 2010-05-06 08:58
原来又是山寨广告啊,拿分走人
28 楼 mblmh2008 2010-05-06 08:41
请勿三番五次的把自己公司的广告贴成新闻。
这种东西在坛子里边炫炫就得了,
毕竟你公司的作品没有达到微软、苹果、谷歌那样的水平
应用范围和使用人数也没那么多。
起个吸引人的眼球的名字,然后再文章里打死渲染这玩意儿多好多好。
还发布到新闻里来就不要怕别人骂你。
骂你你就忍着,还回嘴别人是什么市井小民,那你是什么?
你市井老鼠吗?

发表评论

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

相关推荐

  • zope.password:密码编码和检查实用程序

    zope.password 该软件包提供了密码管理器机制。 密码管理器是一个实用程序对象,可以编码和检查编码的密码。 文档托管在

  • plone高级安装与设置

    <br />1. ZEO ClusterPIL (Python Imaging Library)libjpeg (JPEG library, usually installed to target/Python2.4/lib)libz (compression, usually installed to target/Python2.4/lib)libxml2-python (required for Marshall support)Cheetah, Paste, PasteDeploy, PasteSc

  • zope的manage管理密码忘记怎么办

    zope的manage管理密码忘记怎么办? 1. 在你的Zope-Instance下新建一个文件,文件名为inituser, 注意没有后缀,不是inituser.txt。 2.在inituser文件里输入“admin:{SHA}QL0AFWMIX8NRZTKeof9cXsvbvu8=”,然后保存,注意:请不要输入双引号。 3.然后重启你的zope或plone,现在你的密码就是123

  • cocos_creator网上教程搜集

    1.//Cocos Creator v1.9.x 用户手册http://docs.cocos.com/creator/manual/zh/2.//Cocos Creator 入门http://docs.cocos.com/creator/manual/zh/getting-started/3.//教程司令部...

  • SVN使用教程之-分支/标记 合并 subeclipse

    由于客户需求突然变化,导致项目需要做较大改动,此时项目组决定由小组1继续完成原来正进行到一半的工作【某个模块】,小组2进行新需求的开发。那么此时,我们就可以为小组2建立一个分支,分支其实就是trunk版【主.....

  • python编程超市购物系统_Python自学之路:购物车程序

    作业要求:1、启动程序后,输入用户名密码登录2、显示用户余额3、打印商品列表4、允许用户根据编号购买商品(卧槽,没有看到,下次更新)5、用户选择商品后,检测余额是否足够6、扣除,不够就提醒余额不足7、扣除,...

  • C++无法输出txt文件全部内容以及输出出现乱码的解决方法

    the tangor and ponkan tangerine). Other cultivars are sweet orange x mandarin hybrids (e.g. clementines). Mandarin traits generally include being smaller and oblate, easier to peel, and less acidic. ...

  • 实验报告-导入导出数据

    课程:数据分析技术 实验室名称: 指导老师: 实训日期: 年 月 日 实训题目:导入导出数据 实训目的: 熟练掌握从一些包中读取数据。 熟练掌握csv文件的导入。...创建一个数据框,并导出为csv格式。...1,olive,54,41

  • 转载:如何给公司取英文名字

     Tangor或者TanG,根据田歌的音节造词,都是比较明快、易读的词。  4、组合创造词  组合创造词是最优的选择,例如Texong,其中,tex是纺织(textile)的缩写,发音又与“田”谐音,表示田歌专注于纺织行业,...

  • Android 明年将不再支持 32 位应用

    近日,Mishaal Rahman 在 Android 13 的代码仓库中发现了一个有趣的提交 —— “Move tangor to 64-bit only”。根据这个提交信息,似乎表明 Google 即将推出的 Pixel 平板电脑将仅支持 64 位的 Android 应用。 ...

  • 常见水果中英文名称对照表

    Tangor 哈蜜瓜 Honey-dew melon 核桃 Walnut 黑莓 Blackberry 红毛丹 Rambutan 花生 Peanut 黄香瓜 Melon 鸡头果 Foxnut ...

  • JAVA输入五中水果英文名称_用英语写所有水果的名称要附带汉语

    Sultana 苏丹葡萄:一种黄色的无核小葡萄原产于小亚细亚 Sweet acorn 甜栎子 Syrup shaddock 汁柚 字母T、V、W开头的水果类英文名称: Tangerine 蜜柑桔 Tangor 广柑 Teazle fruit 刺果 Tough pear 木梨 Vermillion ...

  • 有关于水果的英文单词

    Tangor 广柑 Teazle fruit 刺果 Tough pear 木梨 Vermillion orange 朱砂桔 Walnut 核桃 (Chinese walnut 山核桃) Warden 冬梨 Water Caltrop 菱角 Water-chestnut 马蹄、荸荠 Watermelon 西瓜 White shaddock ...

  • 高级色系PPT11.pptx

    高级色系PPT11.pptx

  • node-v7.9.0-linux-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • 基于tensorflow的的cnn卷积神经网络的图像识别分类

    【作品名称】:基于tensorflow的的cnn卷积神经网络的图像识别分类 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。

  • ### 数据分析概念、使用技巧、优缺点的文章

    数据分析是指通过收集、清洗、处理和解释数据,以发现其中的模式、趋势和关联,从而提供决策支持或洞察见解的过程。它在各行各业中都扮演着至关重要的角色,从市场营销到科学研究,从金融领域到医疗保健,都有广泛的应用。

  • 对微信帐单进行数据分析

    #pip install pandas -i https://mirrors.aliyun.com/pypi/simple #安装pandas处理数据模块 #pip install xlwt -i https://mirrors.aliyun.com/pypi/simple #安装excel模块 #pip install openpyxl #从微信导出对帐帐单 import pandas as pd #引入pandas,重命名为pd,Python3.9.10版本的Pandas无法兼容低版本的xls import numpy as np #导入均值模块 #从第17行读取csv格式的帐单 df = pd.read_csv('微信支付账单(20230101-20230401).csv',header=16) #分析数据 ...... #将分析数据另存为out.xlsx ..... #进行交易进间分析 ...... #统计交易对方 ...... #将结果保存到excel ..... writer.close()

  • node-v7.2.0-sunos-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • 作业.docx

    作业.docx

Global site tag (gtag.js) - Google Analytics