前面我们在“Flex Builder 2拥抱linux”一文中已经将Flex2 Builder 2安装到了Linux版本的Eclipse上了,但是前文我们说到,其中的MXML编辑器不能使用,虽然可以用oxygenXML代替,但是这么个如花似玉的姑娘,少了个胳膊,总是不完美,呵呵,在“Flash Player 8.5 for Linux”一文中,我们说了,这个MXML编辑器不能用的问题,后续我们会解决了,这不,咱今天,就给咱们的姑娘上个胳膊…

前面我们在“Flex Builder 2拥抱linux”一文中已经将Flex2 Builder 2安装到了Linux版本的Eclipse上了,但是前文我们说到,其中的MXML编辑器不能使用,虽然可以用oxygenXML代替,但是这么个如花似玉的姑娘,少了个胳膊,总是不完美,呵呵,在“Flash Player 8.5 for Linux”一文中,我们说了,这个MXML编辑器不能用的问题,后续我们会解决了,这不,咱今天,就给咱们的姑娘上个胳膊。

我们在Linux中打开MXML编辑器时,报如下错误:

java.lang.NullPointerException
  at zorn.editors.mxml.MXMLEditor.init(MXMLEditor.java:201)
  at org.eclipse.ui.internal.EditorManager.createSite(EditorManager.java:778)
  at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:596)
  at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:384)
  at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:552)
  at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:283)
  ...

这说明zorn.editors.mxml.MXMLEditor初始化时,某些应该获取的变量,没有获取到,得到NULL了,所以才会如此报错,进一步我们反编译了下zorn.editors.mxml.MXMLEditor,发现初始化时,获取site对应的Contributor:MXMLEditorContributor,返回了NULL,所以就出错了。这个Contributor的作用为将反映编辑器类型功能的新操作添加到工作台菜单和工具栏中。添加程序与编辑器本身是分开的,原因是任何给定工作台页面都可以具有同一类型的多个编辑器。单个添加程序是由特定类型的所有编辑器共享的,而不是让一个编辑器的每个实例创建操作和图像。以下是MXMLEditor插件的配置文件片段:

  <extension
        point="org.eclipse.ui.editors">
     <editor
           class="zorn.editors.mxml.MXMLEditor"
           icon="icons/flex_over.gif"
           contributorClass="zorn.editors.mxml.MXMLEditorContributor"
           name="MXML Editor"
           id="zorn.editors.mxml.MXMLEditor"
           default="true"
           extensions="mxml">
     </editor>
  </extension>

插件的定义、代码的编写都没有问题,为什么Eclipse初始化编辑器site时,没有初始化添加zorn.editors.mxml.MXMLEditorContributor呢?我对Eclipse的插件开发并不是很熟悉,到现在也没找到原因,熟悉的朋友,或许您可以找到原因。

既然找到问题所在,而这个Contributor只是将反映编辑器类型功能的新操作添加到工作台菜单和工具栏中,那么,其使用使用并不是很大的问题,所以,我们直接修改了zorn.editors.mxml.MXMLEditor的初始化代码,不再获取site对应的zorn.editors.mxml.MXMLEditorContributor,这样MXML编辑器就可以用了。

但是,另人遗憾的是,因为MXML编辑器的设计器需要使用FlashPlayer的某些功能,调用的方法是使用本地调用,也就是调用Win32的dll文件实现的,而在Linux平台下,这种调用那是绝对是失败的,所以,MXML编辑器的设计器是不能用了,这个目前还没找到解决的办法,代码视图下的MXML编辑器是功能完整的,支持代码提示,支持Class Inspect等,效果图如下:

还有的就是,因为没有调用Contributor.setEditor()方法,设置当前活动Editor,所以如果打开某一FLEX2工程的第1个文件是MXML文件的话,因为没有自动导入工程信息会报错,但是重新打开一次,已经以后任意打开MXML文件都不会报错,一切正常。

就我来说,FLEX2的MXML编辑器,一般都是使用代码模式,很少使用Design模式,所以不能使用Design模式影响并不大,所以到这里我们完整的Linux平台Flex2开发环境算是全部搭建好了,在目前Adobe官方未提供Linux版本的Flex Builder 2下,希望我们这一个搭建方法对大家Linux下的Flex2开发有所帮助。

要下载修改过的MXML编辑器,请点击这里,安装方法如下:

将下载的mxml.jar文件复制到你的eclipse/Flex Builder独立安装目录下的plugins/zorn.editors.mxml_2.0.261中,覆盖原来的文件,然后重新启动eclipse就可以了。

以下是这我们搭建Linux平台Flex2开发环境系列文章的其他两篇: