|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
唉!都是钱闹的1.Swing和.net开发比较------从市场份额看.net开发主要占据大部分的中小型和中型的的桌面开发,原因是它封装了很多工具计划在Eclipse中利用SWT举行界面计划SWT是一个IBM开辟的跨平台GUI开辟工具包。至于为何IBM要费力本人重整旗鼓开辟一个GUI工具包,而不是利用Sun现有的由AWT,Swing,Java2D,Java3D等组成的JavaGUI框架,那就说来话长了。(记得在一个BBS上读过一个关于SWT劈头的奚弄类的帖子)。1.为何要利用SWT? SWT是一个IBM开辟的跨平台GUI开辟工具包。至于为何IBM要费力本人重整旗鼓开辟一个GUI工具包,而不是利用Sun现有的由AWT,Swing,Java2D,Java3D等组成的JavaGUI框架,那就说来话长了。(记得在一个BBS上读过一个关于SWT劈头的奚弄类的帖子)。 在SWT之前,Sun已供应了一个跨平台GUI开辟工具包AWT(AbstractWindowingToolkit).固然AWT框架也利用的是原生窗口部件(nativewidgets),可是它一向未能冲破LCD成绩。LCD成绩招致了一些次要平台特性的丢失。假如你不分明的话(实在我也没分明),换句话说,假如平台A有窗口部件(widgets)1-40,而平台B有窗口部件(widgets)20-25,那末跨平台的AWT框架只能供应这两个窗口部件集的交集。 为办理这个成绩,Sun又创立了一个新的框架。这个框架不再利用原生窗口部件,而是利用仿真窗口部件(emulatedwidgets)。这个办法固然办理了LCD成绩,而且供应了丰厚的窗口部件集,可是它也带来了新的成绩。比方,Swing使用程序的界面表面不再和原生使用程序的表面类似。固然在JVM中这些Swing使用程序已失掉了最年夜水平的功能改良,可是它们仍是存在着其原生对应物所不具有的功能成绩。而且,Swing使用程序损耗太多的内存,如许Swing不适于一些小设备,如PDA和挪动德律风等。 IBM举行了实验以完全办理AWT和Swing框架带来的上述成绩。终极,IBM创立了一个新的GUI库,这就是SWT。SWT框架经由过程JNI来会见原生窗口部件。假如在宿主(host)平台上没法找到一个窗口部件,SWT就会主动地摹拟它。2.SWT使用程序的构成 一个SWT使用程序的基础构成部分为显现界面(Display)、命令界面(Shell,任务令进进并使运转初始化)和窗口部件(Widgets)。Display卖力办理事务轮回和把持UI线程和其他线程之间的通信。Shell是使用程序中被操纵体系窗口办理器办理的窗口。每一个SWT使用程序最少必要一个Display和年夜于即是1个的Shell实例。 :从分歧的角度看SWT使用程序 从分歧的角度展现了SWT使用程序。左边的图是一个简化的UI对象的承继图。两头的图展现了UI对象的容器布局(containmentstructure)。右边的图则是创立后的UI表面。 假如一个使用程序利用了多个线程,那末每一个线程都利用的是Display对象分派给它本人的实例。程序员可使用静态办法Display.getCurent()来失掉Display对象确当前举动的实例。Shell用于在特定的操纵体系中体现窗口。Shell能够最年夜化、最小化或一般化。Shell有两品种型。第1种是高层shell,它是Display的子窗口,同时它也是一个主窗口。第2类是对话shell,这类shell要依附于其他的shell窗口存在。shell窗口终极成为上述那品种型,要看在创立shell时传送给shell机关函数的是甚么作风位(stylebits)。一个shell的默许值是DialogShell。也就是说,假如不带参数,那默许就是一个对话shell。而假如给参数付与了一个Display对象,则该shell将是一个高层shell。 一些窗口部件的属性必需在创立它们的早期就要被设置。这些窗口部件的属性就是后面所说的作风位(stylebits)。在SWT的类中,作风位被界说为常数。比方,Buttonbutton=newButton(shell,)。可使用或(OR)操纵符"|"来设置多个作风位。比方,假如想设置一个带界限的压下按钮,必要传送SWT.PUSH|SWT.BORDER作为作风位参数。3.举行SWT开辟前的情况设置 为了举行SWT使用开辟,你必要把SWT库增加到类路径(classpath)上,并设置需要的情况变量。 起首,你要在ECLIPSE_HOMEeclipsepluginsorg.eclipse.swt.win32_2.1.0wswin32目次下找到swt.jar库文件。注重这里的"org.eclipse.swt.win32_2.1.0"目次是和Eclipse的版本有关的。其实找不到你就用文件搜刮功效吧。然后顺次翻开上面窗口Project->Properies->JavaBuildPath->Libraries->AddVariable->EclipseHome->Extend将swt.jar文件加到类路径中。 接着,你一定想编译这个SWT使用了。可是会呈现上面所示的运转非常。呈现这个非常的缘故原由是swt.jar库利用的是原生库。你必要设置java.library.path情况变量来利用Java中的原生库。 把持台(Console)的输入以下: java.lang.UnsatisfiedLinkError:noswt-win32-2136injava.library.path atjava.lang.ClassLoader.loadLibrary(UnknownSource) atjava.lang.Runtime.loadLibrary0(UnknownSource) atjava.lang.System.loadLibrary(UnknownSource) atorg.eclipse.swt.internal.Library.loadLibrary(Library.java:108) atorg.eclipse.swt.internal.win32.OS.(OS.java:46) atorg.eclipse.swt.widgets.Display.internal_new_GC(Display.java:1291) atorg.eclipse.swt.graphics.Device.init(Device.java:547) atorg.eclipse.swt.widgets.Display.init(Display.java:1316) atorg.eclipse.swt.graphics.Device.(Device.java:96) atorg.eclipse.swt.widgets.Display.(Display.java:291) atorg.eclipse.swt.widgets.Display.(Display.java:287) atcom.swtdesigner.trytry.main(trytry.java:24) Exceptioninthread"main" 按上面的步骤设置java.library.path变量:顺次翻开Run->Run...->JavaApplicaton->"Project"->Arguments->VMArguments。在"VMArguments"中输出 -Djava.library.path=c:eclipsepluginsorg.eclipse.swt.win32_2.1.0oswin32x86 注重要输出你本人的swt.jar地点的路径。 小技能:加载原生库: 假如你必要加载本人使用程序所利用的原生库,可使用Runtime.getPlatform.loadLibrary("libraryname")办法。
在性能方面,在windows平台下,.net可能是占强项,要是把.net放在sun开发的操作系统上去运行呢?根本就运行不了,.net对其它操作系统的支持也很弱,性能也可能比不上java。 |
|