从applet启动OpenOffice

时间:2009-07-17 11:22:08

标签: java applet openoffice.org

我有这个代码,这从命令行工作正常... 但是当我把它放在applet中时,我得到了以下错误

com.sun.star.lang.IllegalArgumentException     在com.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 ");

4 个答案:

答案 0 :(得分:1)

您的小程序是否已签名?否则我认为你不能打电话

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

答案 1 :(得分:0)

我同意皮埃尔......你需要一个可信/签名的小程序来做到这一点。您可能还想重新考虑为什么要尝试使用applet而不是独立应用程序(使用webstart或者某些内容,如果您需要通过Web交付)。

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

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

答案 2 :(得分:0)

它已签名,我找到了一种解决方案 - 在我授予的客户端上   permission java.security.AllPermission;现在一切正常...... 我仍然没有尝试授予SignedBy“MyCompany”权限java.securyty.AllPermission 我必须做...

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

我必须使用applet ...它是Oracle Forms应用程序,我需要在客户端启动Calc并填充一些数据。

感谢您的帮助。

答案 3 :(得分:0)

有一种非常简单的方法可以将OOo放在applet中 - 使用OfficeBean

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