Запуск OpenOffice из апплета - PullRequest
0 голосов
/ 17 июля 2009

У меня есть этот код и работает нормально из командной строки ... Но когда я помещаю это в апплет, я получаю следующую ошибку

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 ]

1 голос
/ 17 июля 2009

Ваш апплет подписан ? иначе я не думаю, что вы можете позвонить

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

из апплета.

0 голосов
/ 24 июня 2010

Существует очень простой способ поместить OOo в апплет - используйте OfficeBean

Хотя у вас все еще будут проблемы с безопасностью Java, ваш код будет намного сложнее. Мы используем это, чтобы сделать то же самое. Мой пост о том, как заставить OO 3.2 работать в апплетах Java 6, здесь - вы хотите взглянуть. Работает на 3.1 и 3.2.

0 голосов
/ 20 июля 2009

Подписано, и я нашел решение - на клиенте даю permission java.security.AllPermission; и теперь все работает ... Я все еще не пытался предоставить SignedBy "MyCompany" разрешение java.securyty.AllPermission что я должен сделать ...

Сообщение об ошибке вводит меня в заблуждение com.sun.star.lang.IllegalArgumentException ... глупое сообщение

Я должен использовать апплет ... это приложение Oracle Forms, и мне нужно запустить Calc на клиенте и заполнить некоторые данные.

Спасибо за помощь.

0 голосов
/ 18 июля 2009

Я согласен с Пьером ... для этого вам понадобится доверенный / подписанный апплет. Возможно, вы также захотите пересмотреть, почему вы пытаетесь сделать это с помощью апплета, а не отдельного приложения (с помощью веб-запуска или чего-то еще, если вам нужно веб-приложение).

Еще одна вещь, которую следует учитывать, это то, что конечный пользователь должен был бы установить OpenOffice локально (если они не изменили способ работы своего API), чтобы любой доступ Java-OO.o работал правильно. Это требование, возможно, изменилось, прошло уже много времени с тех пор, как я поиграл с их API.

Удачи и надеюсь, это немного поможет.

...