您的位置:首页 > 产品设计 > UI/UE

开发swt/jface工程的buildpath加载jar包的相关问题

2012-10-28 22:02 369 查看
最近研究了一下JFace,下面写点总结,备忘。

先简单介绍一下JFace:

基于Java的图形库最主要的有三种,它们分别是AWT、Swing和SWT;它们产生的时间大体如下:

AWT(abstract windowing toolkit,1995年,随JDK一起,SUN公司) --->Swing(JFC, java foundation classes, 1997年,随JDK一起,sun公司) ---> SWT(standard widget toolkit,2001年,Eclipse子项目,IBM公司)。详见:Java
GUI 的发展和演化的概述:http://java.ccidnet.com/art/3577/20060823/877603_1.html

SWT的执行效率非常高。这是由于SWT的底层是由C编写的。由于SWT通过C直接调用系统层的 GUI API。因此,使用SWT编写GUI程序,在外观上就和使用C++、Delphi(在Windows下)编写的程序完全一样。它的这一点和AWT类似。 AWT在底层也是使用C直接调用系统层的GUI API。但它们是有区别的,最大的区别可能就是一个是Sun提供的,一个是Eclipse自带的。这就意味着如果使用AWT,只要机器上安装了JDK或 JRE,发布软件时无需带其它的库。而如何使用SWT,在发布时必须要自带上SWT的*.dll(Windows版)或*.so(Linux/Unix
版)文件以及相关的*.jar包。还有就是它们所提供的图形接口有一些差异。SWT可能更丰富一些,我们可以看看Eclipse的界面就知道了。但随着 Sun对AWT库的不断更新,AWT的图形表现能力也在不断地提高。

虽然SWT很强大,但它比较底层。也就是说它的一些功能在使用上还比较低级,不太符合面向对象的特征。因此,在SWT的基础上又开发了JFace。JFace在SWT上进行了一定的扩展。因此,也可说JFace是基于 SWT的,就象在VC中使用MFC来包装Win32 API一样。

【附】

百度百科:http://baike.baidu.com/view/1500987.htm

一些入门资料:http://wenku.baidu.com/view/adca230f76c66137ee06193c.html?from=rec&pos=0&weight=83&lastweight=31&count=5

http://www.doc88.com/p-51890799597.html

明白了JFace是什么时候,做点东西出来。

首先搭建环境:

1、根据这篇文章http://incan.iteye.com/blog/282500,“和SWT不一样,JFace并没有现成的和Eclipse分开发布。这意味着你必须安装Eclipse以获得JFace。JFace并不要求你在硬盘上保留Eclipse,所以如果愿意的话,你可以自由的将JFace的JAR文件复制到其他目录下,然后将Eclipse删去。JFace的JAR文件全部在eclipse/plugins目录下,分散在不同的JAR文件中:

org.eclipse.jface_3.0.0中的jface.jar

org.eclipse.core.runtime_3.0.0中的runtime.jar

org.eclipse.osgi_3.0.0中的osgi.jar

org.eclipse.jface.text_3.0.0中的jfacetext.jar

org.eclipse.text_3.0.0中的text.jar

  你可以将这些文件复制到你喜欢的任何地方,并且必须将这些文件(或者至少是你用到的那些)与你的JFace程序一起发布。你并不需要在每一个程序中都用到所有这些文件,所以可以仅仅发布你的程序所依赖的那部分”

会有这个错误:

Multiple markers at this line

- The hierarchy of the type SaveAsAction is inconsistent

- The type org.eclipse.core.commands.common.EventManagercannot be resolved. It is

indirectly referenced from required .class files

然后我就放弃这个部署(其实和后面这个一样)

2、根据这篇文章http://wenku.baidu.com/view/21dcb624ccbff121dd36837f.html,添加相应的classpath
variables,如下图:



Myeclipse/Eclipse --> window -->preferences --> java --> build path -->classpath variables添加如下文件:



然后工程里面导入这些classpath variables:



继续有这个错误:

Multiple markers at this line

- The hierarchy of the type SaveAsAction is inconsistent

- The type org.eclipse.core.commands.common.EventManagercannot be resolved. It is

indirectly referenced from required .class files

到此,我就感觉不是部署有问题了,仔细看看错误提示,原来是缺少这个org.eclipse.core.commands.common.EventManager类,于是按照上面的步骤继续添加一个classpath variables:COMMANDS_LIB;指向 org.eclipse.core.commands_3.5.0.I20090525-2000.jar。

接着又出现一个错误:

The import org.eclipse.core.runtime.IProgressMonitorcannot be resolved

看来需要继续添加classpath variables;不知道这个类被打到那个包里面了,百度一下,发现这篇文章 解决Eclipse 中 org.eclipse.core.runtime.IProgressMonitor 异常

http://hi.baidu.com/xbkaishui/blog/item/ee105a1c6f793405314e1547.html,引用如下:

“最近在看 SWT/JFace 在配置JFace时老是出错 org.eclipse.core.runtime.IProgressMonitor 异常 还有找不到main 方法

SWT/JFace 还是比较难搞的:提供以下解决方法

解决 Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-win32-3139 in java.library.path

因为SWT使用了JNI调用C,所以你需要把相对应版本的dll文件(swt-win32-xxxx.dll)copy到C:/windows/system32下面.

解决 java.lang.NoClassDefFoundError: org/eclipse/core/runtime/IProgressMonitor

很多人说导入org.eclipse.core.runtime_x.x.x.jar 就ok,但你自己试试就知道并不是所有版本的org.eclipse.core.runtime_x.x.x.jar 里都有IProgressMonitor这个class.

所以即使你导入了org.eclipse.core.runtime_x.x.x.jar 到project也可能无济于事。

去plugins下面找找org.eclipse.equinox.common.x.x.x.jar,然后导入到project ,你会发现IProgressMonitor 悠然的躺在那里。

解决 Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/commands/common/EventManager

解决了上面两个问题以为大功告成,其实还差一步。导入org.eclipse.core.commandsx.x.x.jar到project中,我们的第一个SWT/JFace就能跑起来了。

其实用 SWT Designer 就可以避免种种错误 下面说一下JFace 开发中需要导入的包 我的eclipse 是 3.5.0版本的

org.eclipse.jface.text_3.5.2.r352_v20091118-0800.jar

org.eclipse.jface_3.5.2.M20100120-0800.jar

org.eclipse.swt.win32.win32.x86_3.5.2.v3557f.jar

org.eclipse.text_3.5.0.v20090513-2000.jar

org.eclipse.core.commands_3.5.0.I20090525-2000.jar

org.eclipse.core.runtime_3.5.0.v20090525.jar

org.eclipse.equinox.common_3.5.1.R35x_v20090807-1100.Jar

org.eclipse.equinox.registry_3.4.100.v20090520-1800.jar

org.eclipse.osgi_3.5.2.R35x_v20100126.jar

导入如上包 就可安全运行”

这篇文章其实解决了上述所有问题。

【附】网上的一些例子:

https://www.ibm.com/developerworks/cn/opensource/os-jface1/

http://incan.iteye.com/blog/282500

最后,贴一张实现的WordPad程序,(网上找来的开源,网址不记得了)如图:



怎么样?还是那么回事吧。

转载自http://blog.csdn.net/folio/article/details/7328135
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: