如何在处理 Open Office 文档后停止 Java

How to stop Java after processing Open Office documents

我正在使用 Java 创建和编辑 Open Office 文档。但是修改文件后Java并没有退出,仍然运行着很多线程,比如Thread[Pipe:CO>]、Thread[Pipe:CE>]和Thread[MessageDispatcher]。我希望能够关闭这些线程并允许 Java 在代码完成后关闭。

这是我打开和关闭文档的代码:

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();
    }
}

提前致谢!

正如我在评论中指出的那样,在 https://wiki.openoffice.org/wiki/API/Samples/Java 的 BookmarkInsertion 示例中,代码以 System.exit(0);.

结尾

此外,是否有理由要求所有变量都必须是静态的?这似乎不允许它们被正确销毁。