PanTian 香草园主

关注软件产业的历史、现在、未来。 30而立,立志的立,新的开始……
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

用Eclipse 3.1.1开发图形编辑程序

Posted on 2006-06-22 23:13  pantian  阅读(2166)  评论(0编辑  收藏  举报

注一:Eclipse现在稳定发布版本是3.1.2,最新版本是3.2 RC7,估计3.2的正式发布版本也很快就会出来了,相关信息请参考Eclipse的网站

 

注二:在程序的开发过程中,重点参考了:

八进制:您的《GEF入门系列》博客是我这个程序的基础;

子在川上曰:您的《Eclipse从入门到精通》这本书给了我非常大的帮助;

中国Eclipse社区:这个社区解决了我的一些疑惑,虽然该社区人气好像不足;

感谢这些从来没见过面、却给过我帮助的人。

 

[名词解释]

流片(Tapeout):简单地说,就是把图纸上的设计(由IC设计公司来设计,如:我们公司)变成实实在在的芯片(让专门的芯片制造公司根据图纸来制造,如:中芯国际)的过程。

 

[需求]

我现在的公司是家IC设计企业,在芯片设计的流程中,最后一个环节是:流片。在把芯片拿出去流片前,工程师们会对准备流片的技术文件进行非常严格的验证、测试。虽然我们公司的某些产品在全世界都处于领先地位,但在验证芯片里的每个PinPadChip的位置,及连线时,仍然没有非常好的工具,只能依靠工程师们的经验。这有可能会导致某些产品流片失败,而每次流片的最低成本都在几千美元以上。

因此,公司希望能做一个软件,把PinPadChip及其它相关的数据输进去,能直观地把它们之间的关系表达出来,并按照一定的规则来自动进行验证,如果出现了错误,应该还可以对其进行直接地拖动、平移、旋转,以得到正确的结果,最后将结果输出为AutoCAD能打开的文件格式。

另外,该软件需要在设计工程师们的机器上运行,而他们的机器均为SolarisLinux,因此,该软件需要能跨平台运行。

 

[实现]

1、由于需要跨平台(WindowsLinuxUnix),所以,只能选择Java

2、Java下的编程平台,风头最劲的似乎只有Eclipse了,NetBeans 5.0当时还没有发布(这个软件是三个多月前开工的,由于需求的多变性,才完工没多久),在此之前,我在2001年接触过它的前身Visual Age,但对Eclipse只是听说过;

3、OK,开发平台、语言都选择好了,就可以开工了。

4、具体开发过程,我这里就不多说了,主要是也没什么好说的,把八进制的那一系列文章看完就差不多会了,再次感谢八进制。

5、AutoCAD可以支持两种格式的文件:DWGDXF。其中,DWG是二进制格式,DXFASCII文件格式,签于DXF格式的资料比较多,因此,我在输出文件时,选择了DXF格式(简单形状、文本的输出并不难,写几个小函数就搞定了),其格式说明,附在每个版本的AutoCAD帮助文件中。

 

[运行截图]

1、Window运行如下:



2、
Red Hat AS4GTK)运行如下:

3、Solaris 8Motif SPARC)运行如下:

BTW:为了测试该软件在Solaris平台的运行情况,我曾经在开发机器上安装了一个VPC2004,并用2005年第8期的《程序员》杂志赠送的Solaris 10 for x86DVD光盘安装成功。

说实话,Solaris 10确实是个非常优秀的操作系统,高性能就不用说的,而且其中的Java Desktop 3界面非常精致,操作也相当方便,没安装过的朋友,可在此看看界面,最最重要的是:Solaris 10是开源的

 

[后记]

在开发过程中,碰到了几个有意思的问题,特记录如下:

1、程序在Eclipse 3.1.1环境下运行时都很正常,但是,当用RCP打包后,再运行却总是报错:

java.lang.RuntimeException: No application id has been found.

但如果用Eclipse 3.2版的程序来打包,得到的可运行程序,就能正确运行(八进制的例子里用的是Eclipse 3.2)。

 

原因(应该是一个Bug):

我把在网上查找了大量的资料,虽然也有很多人碰到这种问题,但他们的方法都不能解决我的问题,百思不得其解。后来,实在是没办法了,就把用3.1.13.2打好包的程序来做一一对比(我晕头了,其实最开始就应该试用这个方法),终于发现了问题所在:

由于在程序里使用到EclipseUML来建模,并生成了相应的xxxModelxxxxModel.edit包。但用3.1.1打包时,这些包里的主要文件(如:plugin.xmlplugin.propertiesMETA-INF目录)并没有被包含进去。而用3.2打包时,会自动把Model包里所有的文件都包含进去。

 

解决办法:

自然是手工选择所需要的文件,然后再打包,即可

 

2、该程序需要在Unix/Linux下运行,所以,在程序里显式地写程序路径时,注意WindowsUnix/Linux的路径区别,前者支持“/”、“\”两种,而后者只支持“/”一种。

 

3、在插入了RCP Delta包来Export多平台包时,Eclipse3.1.1--3.2RC5均有个Bug,这个Bug会导致输出到Solaris平台的程序包无法运行,包里需要执行的文件在Solarisfile命令查看时,竟然是data格式的文件。

 

两种解决办法:

A、升级你的Eclipse到最新版本,至少是3.2RC5以后的版本;

B、先下载Eclipse-RCP-SDK-3.1.1-solaris-motif,然后解压缩,并将其中的Eclipse文件替换掉\features\org.eclipse.platform.launchers_3.1.0\bin\motif\solaris\sparc目录下的launcher文件,即:删除launcher文件,将Eclipse文件Copy过来,并改名为launcher文件即可。

 

[总结]

第一次使用Eclipse做项目,感觉Eclipse还是相当不错的,界面美观友好,编辑器功能强大,操作方便,至少有GEF 这个框架(.Net下有类似框架吗?知道的朋友还请通告一声),而且如果出现了什么问题,可以自己去看源代码,修正错误(.Net就只能等MS的升级包了)。

但是Eclipse也有不太舒服的地方,比如:需要自己去手动配置开发环境,自己去找你并不熟悉的、但需要对应版本的开发包,而且有较多的Bug(上面两个Bug花费了我相当长的时间,.Net里至少还没碰到这种低级的、但又相当严重的Bug),虽然它升级很快。

而且因为升级太快,也造成了我的困惑:我有必要每几个月就升级一次我的编程平台吗?升级平台毕竟是件比较麻烦的事情,说不定其中有些包的API就不再被支持了,而我一个项目都还没做完呢。但如果不升级,某些功能又享受不到,某些Bug也还得继续存在,两难呀……


[
幸好我的下一个项目是.Net,可以等Eclipse 3.2出炉再说了]