2009-07-17 54 views
0

开始OpenOffice的我有这样的代码来,命令行... 这个工作正常,但当我把这个小程序中我得到的COM以下错误从applet的

com.sun.star.lang.IllegalArgumentException .sun.star.comp.bridgefactory.BridgeFactory.createBridge(BridgeFactory.java:158) 在 com.sun.star.comp.urlresolver.UrlResolver $ _UrlResolver.resolve(UrlResolver.java:130)

人有解决这个问题?哪里可以找到BridgeFactory的源代码?

Runtime.getRuntime().exec("C:/Program Files/OpenOffice.org 3/program/soffice.exe -accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager"); // oooUrlW - the url of soffice.exe 
       Thread.sleep(5000); 

       XComponentContext xLocalContext = com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(null); 
       XMultiComponentFactory xLocalServiceManager = xLocalContext.getServiceManager(); 
       Object urlResolver = xLocalServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver",xLocalContext); 
       XUnoUrlResolver xUnoUrlResolver = (XUnoUrlResolver) UnoRuntime.queryInterface(XUnoUrlResolver.class,urlResolver); 

       Object initialObject = xUnoUrlResolver.resolve("uno:socket,host=localhost,port=8100;urp;StarOffice.ServiceManager"); 
       XPropertySet xPropertySet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,initialObject); 
       XComponentContext remoteContext = (XComponentContext) UnoRuntime.queryInterface(XComponentContext.class, xPropertySet.getPropertyValue("DefaultContext")); 

       XMultiComponentFactory remoteServiceManager = remoteContext.getServiceManager(); 
       Object desktop = remoteServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", remoteContext); 

       xDesktop =(XDesktop) UnoRuntime.queryInterface(XDesktop.class, desktop); 
XComponent xCalcComponent = 
      newDocComponent(xDesktop, "scalc"); 
      XSpreadsheetDocument xCalcDocument = 
         (XSpreadsheetDocument)UnoRuntime.queryInterface(
              XSpreadsheetDocument.class, xCalcComponent); 
      XSpreadsheets a=xCalcDocument.getSheets(); 
      Object o = a.getByName("Sheet1"); 

      XSpreadsheet sheet = (XSpreadsheet)UnoRuntime.queryInterface(
        XSpreadsheet.class, o); 


      XCell jjjj = sheet.getCellByPosition(0, 0); 
      jjjj.setFormula("Some Text "); 

回答

0

它签订后,我发现一种解决方案 - 在客户端我承认 permission java.security.AllPermission;现在一切工作...... 我还是did'nt尝试授予SignedBy“MyCompany的”权限java.securyty.AllPermission 我必须做...

错误消息是误导我 com.sun.star.lang.IllegalArgumentException ...愚蠢的消息

我必须使用小程序...这是Oracle Forms应用程序,我需要启动计算器在客户端并填写一些数据。

感谢您的帮助。

1

是您的小程序签署?否则我不认为你可以拨打电话

Runtime.getRuntime().exec("C:/Program Files/OpenOffice.org 3/program/soffice.exe-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager"); 

从一个小程序。

0

我同意皮埃尔......你需要一个可信的/签名的小程序来做到这一点。您可能还想重新考虑为什么您要使用applet而不是独立应用程序来执行此操作(使用webstart或需要网络交付的内容时)。

还有一件需要考虑的事情是,最终用户必须在本地安装OpenOffice(除非他们改变了其API的工作方式)以使任何Java-OO.o访问能够正常工作。尽管这个要求可能已经改变了,但是我已经玩了他们的API已经有一段时间了。

祝你好运,我希望这会有所帮助。

0

有一个很简单的方法来放置OOo的在一个小程序 - 使用OfficeBean

虽然您仍然有你的Java安全问题,你的代码将会有很多更紧。我们正在使用它来做同样的事情。我的帖子关于如何在Java 6 applet中使用OO 3.2工作是here是你想看看。它适用于3.1和3.2。