2015-12-15 6 views
1

Я использую Java для создания и редактирования документов Open Office. Однако после изменения документов Java не выходит и продолжает запускать много потоков, таких как Thread [Pipe: CO>], Thread [Pipe: CE>] и Thread [MessageDispatcher]. Я хотел бы иметь возможность закрыть эти потоки и позволить Java закрываться, когда код будет выполнен.Как остановить Java после обработки документов Open Office

Вот мой код для открытия и закрытия документов:

private static Object oDesktop; 
private static XStorable xStorable; 
private static XComponent xSpreadsheetComponent; 
private static XComponentContext xContext; 
private static XSpreadsheetDocument xSpreadsheetDocument; 
private static XSpreadsheets xSpreadsheets; 

    public static void openDocument(String filename) 
    { 
    try 
    {   
     // Get the remote office component context 
     xContext = Bootstrap.bootstrap(); 

     // Get the remote office service manager 
     XMultiComponentFactory xMCF = xContext.getServiceManager(); 

     // Get the root frame (i.e. desktop) of openoffice framework. 
     oDesktop = xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", xContext); 

     // Desktop has 3 interfaces. The XComponentLoader interface provides ability to load components. 
     XComponentLoader xCompLoader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, 
       oDesktop); 

     PropertyValue[] loadProps = new PropertyValue[0]; 

     xSpreadsheetComponent = xCompLoader.loadComponentFromURL(getUpdatedPath(filename), "_blank", 0, loadProps); 

     xStorable = (XStorable) UnoRuntime.queryInterface(XStorable.class, xSpreadsheetComponent); 

     xSpreadsheetDocument = (XSpreadsheetDocument) UnoRuntime.queryInterface(XSpreadsheetDocument.class, 
       xSpreadsheetComponent); 

     xSpreadsheets = xSpreadsheetDocument.getSheets(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

    public static void closeDocument() 
{ 
    try 
    { 
     XCloseable xCloseable = (XCloseable) UnoRuntime.queryInterface(XCloseable.class, xStorable); 

     if (xCloseable != null) 
     { 
      xCloseable.close(false); 
     } 
     else 
     { 
      XComponent xComp = (XComponent) UnoRuntime.queryInterface(XComponent.class, xStorable); 

      xComp.dispose(); 
     } 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

Заранее спасибо!

+0

Это отдельная программа? – Rao

+0

Я использую Eclipse для запуска кода, если это то, что вы просите :). –

+1

Я имею в виду, есть ли у него основной метод? – Rao

ответ

1

Как я отметил в комментарии, в примере BookmarkInsertion от https://wiki.openoffice.org/wiki/API/Samples/Java код заканчивается на System.exit(0);.

Кроме того, есть ли причина, по которой все переменные должны быть статическими? Это не похоже, что это позволило бы им быть уничтожены должным образом.