May 26, 2010, 9:05 am
第一次用java swing写了套桌面程序,来自动化一些工作上的事情。有人问我为什么不用AIR,毕竟是比较熟悉的flash开发模式,我的理由是AS相关的文档处理类库不够丰富,可能这也是AIR的一个不太好的地方。
熟悉AIR和swing的人应该知道,AS这类动态语言在UI编程的效率方面比java好N多,比如bind非常实用和简便。可是java swing借助一些丰富的类库也能实现类似功能,比如这次要讲的betterbeansbinding,可以实现JList,JTable等swing组件和java beans的绑定,单向或双向的都行。
举例一段代码
jtb = SwingBindings.createJTableBinding(UpdateStrategy.READ_WRITE, vec, wage_list);
BeanProperty<SJPerson, ?> sjp_name = BeanProperty.create("personName");
BeanProperty<SJPerson, ?> sjp_wage1 = BeanProperty.create("wage1");
BeanProperty<SJPerson, ?> sjp_wage2 = BeanProperty.create("wage2");
jtb.addColumnBinding(sjp_name).setColumnName("姓名").setEditable(false);
jtb.addColumnBinding(sjp_wage1).setColumnName("底薪").setColumnClass(Float.class);
jtb.addColumnBinding(sjp_wage2).setColumnName("技术津贴").setColumnClass(Float.class);
jtb.bind();
它的作用是将
- Vector<SJPerson> vec
- JTable wage_list
双向绑定,vec是一组beans,在JTable里显示一个row。
更多信息可搜索或者Google code
September 16, 2008, 5:03 pm
最近一直在做AIR的项目,顺便结合前面文章来讨论一下各种方案的优缺点。
起因
AIR是一项不错的桌面技术。貌似现在很多公司都在采用AIR了,我估计很多人都是看上了它漂亮的UI吧(确实做的很酷噢,而且相应的开发效率很高)。不过有时候它并不能跟传统的桌面技术相比。我感觉原因有这么几个:
- 缺少各种类库支持。咋一看上去AIR或者Flex的第三方类库还是挺多的,不过注意,它们很多往往还是集中在UI方面,广度不够。
- 不支持系统相关的特性。这是跨系统的通病。看看java就知道。
- 不支持调用系统命令。这估计是最大的硬伤了。
俺最喜欢搞技术混搭了。既然世界上有这么多技术存在,为什么不取长补短,发挥各自优势呢。在分析之前,首先先看看扩展程序将基于一个怎么样的架构:

系统结构图
这是以前的一张图了。它说明了一点,就是扩展程序跟AIR是并行的两条进程,之间通过socket交换命令,一般用户先启动扩展程序,扩展程序再启动AIR。 它的好处在于:低耦合,把AIR不能或不容易做的事情都交给扩展程序,它们之间只要用简单的socket命令就能相互指挥了。我暂时还没有想到更好的方案:)。下面总结一下这个扩展程序要具备哪些特性:
- 扩展性能好,类库多。
- 不用UI。废话,AIR已经是UI了。注意扩展程序完全做为一条没有UI的进程在跑,可以将对普通人它是隐藏的。这里顺便讲个问题,如果有人手动关了怎么办?要知道AIR是可以探测socket的连接情况了,如果关了,没办法,AIR给提示或者一起关了随便你。
- 体积小。有人可能不在乎。AIR runtime for windows 大概10M左右,for linux大概13M,for Mac大概15M。:-),自己衡量吧。我想用户都喜欢精巧的玩意儿吧,至少我是喜欢的。
- 跨平台。桌面技术很难做到跨平台,因为系统相关的特性就不支持了。不过我觉得至少70%可以跨平台就好了,至少为了工作量。
下面分析几个我当时考虑的几种技术:
- C++。这是一个很古老的技术,我最后选的也是它(最老搭配最新,绝配啊)。C++分好多种,为了跨平台,要少用VC等系统相关的API,要多用标准C++的类库,这里非常推荐一下boost类库。这里有人可能认为C++不是跨平台的,要知道C++的设计理念是write once, compile everywhere,只要在各个平台上编译就行了。如果要搭上其它的五花八门的功能,外面也有超多的类库支持。比如我做的录音程序(暂时还没找到跨平台的类库,我估计是没有的)和socket server。总结一下。优点:类库多,性能高,体积小,70%跨平台。缺点:难度比较高,容易出错。
- python。这个东西不是很大众(我喜欢的)。是基于C开发的,跟C++结合的很好,类库也够多,能做到90%跨平台。但是python要一个解释器和基本类库的才能运行的。总结。优点:类库多,性能可以(如果不是要求很高),90%跨平台,融合性非常棒(能调用dll等,跟各种其他技术都能很好配合),快速开发效率高。缺点:体积一般(如果结合解释器和基本类库一起打包大概5M左右),不够大众化。
- java。够普遍了,直接总结。优点:类库多,基本上完全跨平台,够大众化,开发效率高。缺点:完全跨平台(跨多了也不好),性能一般(其实速度可以了,不过JVM一开总要强点内存),体积大(JVM比较大了,这是我直接淘汰它的理由)。
还有一些其他的我不太懂,不过扩展程序不需要UI,这三个基本上够对付了。怎么取舍关键还是看需要。