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中。
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中。