Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7096530
  • 博文数量: 703
  • 博客积分: 10821
  • 博客等级: 上将
  • 技术积分: 12042
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-02 10:41
个人简介

中科院云平台架构师,专注于数字化、智能化,技术方向:云、Linux内核、AI、MES/ERP/CRM/OA、物联网、传感器、大数据、ML、微服务。

文章分类

全部博文(703)

分类: Java

2006-06-15 09:53:51

OpenOffice是一款优秀的开源办公套件,由sun公司贡献给开源社区。如果在Eclipse下继承它,则相当于给Eclipse添加了办公套件的支持。为此,笔者进行了尝试,如下。
    OpenOffice提供了若干Jar包,专门提供在Java里面嵌入OpenOffice和调用OpenOffice服务的方法。在其自带的例子中,有OfficeBean和OfficeDev可供参考。但是,如果把他们直接采用SWT_AWT嵌入时,会出现找不到officebean库的异常。经分析,原因在于officeben.jar中的LocalOfficeConnection文件加载officebean库时,采用了如下代码:
    String aSharedLibName = getProgramPath() + java.io.File.separator + System.mapLibraryName(OFFICE_LIB_NAME);
    System.load(aSharedLibName);

而getProgramPath()采用
    File path = NativeLibraryLoader.getResource(this.getClass().getClassLoader(), aExec);
    其中,aExec为soffice.exe文件,即OpenOffice的启动文件名称。NativeLibraryLoader.getResource采用 classloader.getResource(s) 加载资源。
    问题就出现在最后的classloader.getResource(s)。在普通的Java程序中,只要在PATH路径里面设置了OpenOffice的路径,并且把OpenOffice的路径传递给classpath,则通过classloader.getResource(s)可以正确的找到soffice.exe,从而可以正确得到aSharedLibName的路径。但是在Eclipse下,无论怎样设置PATH和传递classpath都不能使Eclipse找到soffice,从而加载库错误。
    找到问题的根源后,直接修改getProgramPath()就可以了。为了在客户机上不用安装OpenOffice,把OpenOffice安装之后的目录拷贝到插件目录下,然后采用如下代码获取插件的目录:
    mProgramPath = Platform.getBundle("org.openoffice").getLocation()+"program"; if(mProgramPath.indexOf("@/")>0) { 
        mProgramPath=mProgramPath.substring(mProgramPath.indexOf("@/")+2);
   }
    这样就可以加载了。但是别忘记了在PATH中设置上述路径,因为officebean在加载其他组件时采用默认方式,必须在PATH中设置路径才能正确找到。这就要求制作安装程序,由安装程序把此路径写入PATH中。
阅读(2572) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~