现在真的是落伍了,直到现在我才知道什么是swt以及swt是干什么的。这两天有时间搞了一下,感觉还是很不错的,这篇文章主要是记录如何安装和配置swt。都是别人写过多少遍的文章了,虽然内容类似,但是我还是希望能用自己的语言记录下来。
第一步:下载并安装swt。
SWT下载地址:http://www.instantiations.com/windowbuilderpro/
注册机下载地址:http://www.itpub.net/714132.html
第二步:安装swt,安装的过程相对简单,下一步下一步就可以。注册机的使用方法大家也自己琢磨一下吧,写起来实在是很累;
第三步:配置SWT环境。如果要在Eclipse下使用SWT,还必须在Eclipse中加入swt的JAR包,不然即使能使用SWT设计界面,但是在程序运行的时候就会报ClassNotFound的错误。配置时,在Eclipse的界面中,点击“windows/Prefernces",在左侧的列表中依此点击java/installed JRES节点,此时右侧界面应该出现当前所使用的JDK,选择当前使用的JDK,然后点击EDIT按钮,在点击AddExternal JARs按钮,在文件选择对话框中将如下JAR包加进来:
如果Eclpse的plugins目录为D://MyEclipse Enterprise Workbench 5.1.0 GA/eclipse/plugins,则需要加入的jar包为:
org.eclipse.swt.win32.win32.x86_ 3.2.1 .v3235.jar;
org.eclipse.swt_ 3.2.1 .v3235e.jar;
org.eclipse.core.commands_ 3.2.0 .I20060605-1400.jar;
org.eclipse.jface.text_ 3.2.1 .r321_v20060810.jar;
org.eclipse.jface_ 3.2.1 .M20060908-1000.jar;
org.eclipse.equinox.common_ 3.2.0 .v20060603.jar
以上五个jar包必须一个不少的都加进来,如果少一个,则会出现SWT无法运行或出错的情况。
最后一步,注册DLL文件。在SWT插件目录下有一个dll文件,我本机上的文件名是swt-win32-3235.dll如果使用的版本不一样,那么有可能会导致文件名不同,但是都是swt-win32-*.dll的格式,将该文件复制到c:/window/system32下,然后在CMD中运行regsvr32 [文件目录]swt-win32-3235.dll,注意regsvr32后面要有一个空格,回车后应该提示注册成功。网上有文章说只要复制到system32下就可以,但是在我的机器上必须注册后才能使用,可能操作上有区别吧。
[2008-4-13更新]:在完成以上步骤后,如果仍然提示找不到swt的包,那么请检查一下所使用的JDK,特别是对于使用myeclipse的朋友,依此点击windows—preferences—Java—install JARs,看一看所使用的JDK版本,如果是myeclipse的话,会默认选择weblogic下的JDK,把JDK换成你本机的就行,例如我本机的就是C:/j2sdk1.4.2_06。
当以上工作完成后,SWT的安装过程就完成了。下面我们可以开始第一个swt程序了。
首先在ECLIPSE中点击新建——PROJECTS,应该能看到列表中有一个designer节点,选择SWT项目;
然后在该项目上新建一个windows application,方法是在工程节点上点击右键,就可进行选择;
这时就可以设计GUI界面了,左侧是组件面板,具体组件的作用大家自己查资料吧,因为我也是刚接触。
首先将一个button组件拖到面板中,所有属性设置为默认。、
在面板中点击该按钮对象,然后在左侧的组件面板中点击event页签,下面显示的是事件列表,选择其中的select节点,选择wigdeselect事件,大家可以把该事件理解为awt.event的actionlistener。双击该名称右侧的文本框。这时会切换到source界面;在代码界面中写入对事件的处理:
MessageDialog.openInformtation(shell,””,”你好,这是一个swt的演示程序”);
输入后按ctrl+shift+o,让eclipse自动导入所需要的包
如果之前没有导入org.eclipse.jface.text_3.2.1.r321_v20060810.jar和org.eclipse.jface_3.2.1.M20060908-1000.jar的话,会导致该事件处理不可用。
完成后,点击左上角的“test designer windows”可以查看设计的界面,注意,该界面是一个预览的界面,事件处理和其他处理逻辑是不起作用的。
完成后,在eclipse中run一下,就能看到效果。
在我使用的过程中还碰到了一些稀奇古怪的错误,在这里列出来,希望能给大家提供参考:
1、点击run时就弹出错误提示框,错误信息为:Fatal exception occurred Program will exit.同时控制台报错:
java.lang.UnsatisfiedLinkError: no swt-win32-3236 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1517)
at java.lang.Runtime.loadLibrary0(Runtime.java:788)
at java.lang.System.loadLibrary(System.java:834)
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:123)
at org.eclipse.swt.internal.win32.OS.<clinit>(OS.java:18)
at org.eclipse.swt.widgets.Display.<clinit>(Display.java:125)
at test.main(test.java:17)
出现这个问题的话,就把swt-gdip-win32-3236.dll和swt-win32-3236.dll拷贝到C:/j2sdk1.4.2_06/jre/bin目录下即可;
2、如果运行程序时能出来SWT界面,但是点击按钮时控制台报错,并提示:java.lang.NoClassDefFoundError: org/eclipse/core/commands/common/EventManager
at org.eclipse.jface.resource.JFaceResources.getFontRegistry(JFaceResources.java:267)
at org.eclipse.jface.window.Window.createShell(Window.java:503)
at org.eclipse.jface.window.Window.create(Window.java:425)
at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1124)
at org.eclipse.jface.window.Window.open(Window.java:785)
at org.eclipse.jface.dialogs.MessageDialog.openInformation(MessageDialog.java:346)
at test$1.widgetSelected(test.java:28)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:90)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:928)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3348)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2968)
at test.main(test.java:35)
这个问题的原因是缺少org.eclipse.core.commands_3.2.0.I20060605-1400.jar,解决方法是在Install JARs界面中将该jar包加进来,目录是./eclipse/plugins/org.eclipse.core.commands_3.2.0.I20060605-1400.jar。添加完毕后不用重启eclipse,再次执行程序就能正确运行。其实我一直很奇怪第一次配置swt的时候没加这个jar,程序竟然也能运行通过,这个世界真是太奇妙了,呵呵。