swt、eclipse RCP与“Java All in One”

近年来的eclipse与netbeans之争日趋激烈,并不只是IDE争斗那么简单(反正都是免费)。其背后是swt与swing之争,更是IBM所主导的开源Java与Sun所主导的官方Java之争。

搞了四五年Web,冷静下来发觉企业内部应用还是Rich Client好(交互性好、状态管理容易、客户端资源利用度高、易开发等等)。这个事实其实很多做企业开发的同道以至于客户都意识到了,于是出现了很多团 队被迫用winform,甚至回头啃Delphi这类无奈的事情。可惜异构调用还是不爽啊,不仅仅是协议转换的问题,还有语法习惯的问题,更要命的是开发 思路不同的问题。既然Java是大而全的体系,难道我们就不能始终如一地解决问题吗?
这个问题,其实IBM和Sun也都看出来了,所以不论是eclipse还是netbeans,都不仅仅是单纯的IDE,而是力求“平台化”,争的就是Rich Client的标准问题。
可惜Swing始终是慢,慢到让人心烦,慢到让老一点的机器无法忍受,慢到难以让客户接受(甚至JDK1.6也好不到哪里去)。

好在我们还有swt可用。经过本人多次测试,swt的运行效率其实与winform是不相上下的。
以前由于VE实在难用,而NB嫌慢,Swing和swt笔者以前一直是做手工编码。这一点上说句实在话,Swing的代码是超级优美,扩展类库和控件简直可说是一种享受,可惜还是慢(包括JDK1.6)。
最近由于一个项目要求,要用到swt,于是迫不得以用了一把swt designer(毕竟是D版啊)。这才发觉swt开发原来可以如此之快,几乎达到某些人吹嘘的近似Delphi的程度。而swt designer本身,可说是eclipse RCP的经典范例,功能如此之强、速度如此之快,操作如此便捷,彻底颠覆了笔者过去对Java Rich Client那种“恨铁不成钢”的成见。
回头想起myeclipse、Flex Builder这类精品,这才体会到多年前很多同道对eclipse平台的“野望”。eclipse的确是有实力、有希望成为Rich Client的通用标准开发平台。在此向企业应用开发的同道们进行推荐,希望大家共同努力,让国内swt尽快走出“叫好不叫座”的尴尬局面,尽快赶上国外 同行们在此领域取得的成绩。大家可以看一看国外很多利用eclipse RCP搞定的复杂软件,甚至很多项目以前普遍认为是MFC的专属领域;而IBM公司更是把各类软件转向eclipse平台;甚至近日MS都打算染指。 eclipse之野望正一步步成为现实。

企业应用“All in One”,不仅是开发者之福,更是企业用户之福。笔者近来年接触的企业应用,大多数都面临孤岛集成的痛苦。主要原因当然是规划不到位、系统分析散乱、数据不统一所造成,但各个时期技术体系不能“大而全”地解决问题也是技术层面的主因。
WS嚷了好多年,至今复杂低效难用,历史一再证明企业内部异构集成不可取。现在我们有了Java这种“平衡至上”且开源主导的技术,有swt能够 补上Java一直以来的缺憾,能够做到“All in One”。作为企业应用开发者,我们的确是应该认真考虑并实施“Java All in One”。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
开发项目用SWINGRCPSWT.JFACE的分析 第一个SWT程序 下面让我们开始一个SWT程序。(注意:以下的例子和说明主要针对Windows平台,其它的操作系统应该大同小异)。首先要在Eclipse安装文件中找到SWT包,Eclipse组织并不提供单独的SWT包下载,必须下载完整的Eclipse开发环境才能得到SWT包。SWT是作为Eclipse开发环境的一个插件形式存在,可以在${你的eclipse安装路径}\plugins路径下的众多子目录下去搜索SWT.JAR文件,在找到的JAR文件中包含了SWT全部的Java类文件。因为SWT应用了JNI技术,因此同时也要找到相对应的JNI本地化库文件,由于版本和操作平台的不同,本地化库文件的名称会有些差别,比如SWT-WIN32-2116.DLL是Window平台下Eclipse Build 2116的动态库,而在Unix平台相应版本的库文件的扩展名应该是.so,等等。注意的是,Eclipse是一个开放源代码的项目,因此你也可以在这些目录中找到SWT的源代码,相信这会对开发很有帮助。下面是一段打开空窗口的代码(只有main方法)。 import com.e2one.example; public class OpenShell{ public static void main(String [] args) { Display display = new Display(); Shell shell = new Shell(display); shell.open(); // 开始事件处理循环,直到用户关闭窗口 while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } } 确信在CLASSPATH中包括了SWT.JAR文件,先用Javac编译例子程序。编译无错后可运行java -Djava.library.path=${你的SWT本地库文件所在路径} com.e2one.example.OpenShell,比如SWT-WIN32-2116.DLL件所在的路径是C:\swtlib,运行的命令应该是java -Djava.library.path=c:\swtlib com.e2one.example.OpenShell。成功运行后,系统会打开了一个空的窗口。 剖析SWT API 下面再让我们进一步分析SWT API的组成。所有的SWT类都用org.eclipse.swt做为包的前缀,下面为了简化说明,我们用*号代表前缀org.eclipse.swt,比如*.widgets包,代表的是org.eclipse.swt.widgets包。 我们最常用的图形构件基本都被包括在*.widgets包中,比如Button,Combo,Text,Label,Sash,Table等等。其中两个最重要的构件当数Shell和Composite。Shell相当于应用程序的主窗口框架,上面的例子代码中就是应用Shell构件打开一个空窗口。Composite相当于SWING中的Panel对象,充当着构件容器的角色,当我们想在一个窗口中加入一些构件时,最好到使用Composite作为其它构件的容器,然后再去*.layout包找出一种合适的布局方式。SWT对构件的布局也采用了SWING或AWT中Layout和Layout Data结合的方式,在*.layout包中可以找到四种Layout和与它们相对应的布局结构对象(Layout Data)。在*.custom包中,包含了对一些基本图形构件的扩展,比如其中的CLabel,就是对标准Label构件的扩展,上面可以同时加入文字和图片,也可以加边框。StyledText是Text构件的扩展,它提供了丰富的文本功能,比如对某段文字的背景色、前景色或字体的设置。在*.custom包中也可找到一个新的StackLayout布局方式。 SWT对用户操作的响应,比如鼠标或键盘事件,也是采用了AWT和SWING中的Observer模式,在*.event包中可以找到事件监听的Listener接口和相应的事件对象,例如常用的鼠标事件监听接口MouseListener,MouseMoveListener和MouseTrackListener,及对应的事件对象MouseEvent。 *.graphics包中可以找到针对图片、光标、字体或绘图的API。比如可通过Image类调用系统中不同类型的图片文件。通过GC类实现对图片、构件或显示器的绘图功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值