如何在处理打开的Office文档后停止Java
我正在使用Java创建和编辑开放式Office文档。但是,在修改文档之后,Java不会退出并仍然运行许多线程,例如线程[Pipe:CO>]、线程[Pipe:CE>]和线程[MessageDispatcher]。我希望能够关闭这些线程,并允许Java在代码完成时关闭 这是我打开和关闭文档的代码:如何在处理打开的Office文档后停止Java,java,openoffice.org,Java,Openoffice.org,我正在使用Java创建和编辑开放式Office文档。但是,在修改文档之后,Java不会退出并仍然运行许多线程,例如线程[Pipe:CO>]、线程[Pipe:CE>]和线程[MessageDispatcher]。我希望能够关闭这些线程,并允许Java在代码完成时关闭 这是我打开和关闭文档的代码: private static Object oDesktop; private static XStorable xStorable; private static XComponent xSpreads
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();
}
}
提前谢谢 如我在注释中所述,在中的书签插入示例中,代码以
System.exit(0)结尾代码>
还有,所有变量都需要是静态的原因吗?这似乎不允许它们被正确地销毁。这是一个独立的程序吗?我正在使用Eclipse来运行代码,如果这是您要问的:)。我的意思是,它有主方法吗?发布主方法的相关部分可能会有所帮助。如果从中查看书签插入示例,它以System.exit(0)结尾代码>还有一个原因是所有变量都需要是静态的吗?这似乎不允许它们被正确地销毁。谢谢你的帖子!这实际上回答了我的问题(所以你可以把它改成一个答案,我会接受它:)。我确实使用了System.exit(0),但是如果文档使用它,我认为这是错误的代码:)。另外,关于静态变量的好观点,我们将仔细研究一下。