0

我把这段代码写下来,从命令行可以正常工作......但是当我把它放在小程序中时,我得到了以下错误

com.sun.star.lang.IllegalArgumentException at com.sun.star.comp.bridgefactory.BridgeFactory.createBridge(BridgeFactory.java:158) at 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

4 回答 4

1

你的小程序签名了吗?否则我认为你不能打电话

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

从一个小程序。

于 2009-07-17T11:26:04.133 回答
0

我同意皮埃尔......你需要一个受信任/签名的小程序来做到这一点。您可能还想重新考虑为什么要尝试使用小程序而不是独立应用程序来执行此操作(使用 webstart 或其他东西,如果您需要 Web 可交付)。

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

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

于 2009-07-17T21:42:07.147 回答
0

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

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

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

感谢帮助。

于 2009-07-19T23:08:18.997 回答
0

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

虽然您仍然会遇到 Java 安全问题,但您的代码会更加严格。我们正在使用它来做同样的事情。我关于如何让 OO 3.2 在 Java 6 小程序中工作的帖子在这里是你想看的。它适用于 3.1 和 3.2。

于 2010-06-24T12:37:30.023 回答