OpenOffice.org 关闭后如何重新连接?
Posted
技术标签:
【中文标题】OpenOffice.org 关闭后如何重新连接?【英文标题】:How do I reconnect to OpenOffice.org once it has been closed? 【发布时间】:2009-11-23 22:48:38 【问题描述】:这是一个示例应用程序,它创建了一个内部带有单个按钮的窗口。单击时,它会连接到 OOo(如果尚未连接)并创建一个文本文档。
除非在 OOo 中创建的所有文档都已关闭,否则这可以正常工作。然后,我在尝试创建下一个图表时收到 DisposedException。这是可以理解的,但是OOo已经关闭了。但是,此时尝试重新连接会给我一个段错误。有没有更好的方法重新连接?我正在使用 Linux(Ubuntu)。
注意:即使 OOo 未打开,它也会正确连接到 OOo。一旦 OOo 被应用程序打开,然后关闭,我们就会得到错误。
您真正需要查看的是 Connect 方法。我只是将它封装在一个 Gtk 接口中以便于测试。
using System;
using unoidl.com.sun.star.uno;
using unoidl.com.sun.star.lang;
using unoidl.com.sun.star.text;
using unoidl.com.sun.star.frame;
using unoidl.com.sun.star.beans;
using Gtk;
namespace TestOOo
class MainClass
static XComponentContext componentContext;
static XMultiServiceFactory multiServiceFactory;
static XComponentLoader loader;
static XTextDocument document;
public static void Main (string[] args)
Application.Init();
Window mainWindow = new Window("Test Window");
mainWindow.Visible = true;
mainWindow.Destroyed += delegate Application.Quit(); ;
Button button = new Button(Stock.Ok);
button.Clicked += delegate Connect(); ;
mainWindow.Add(button);
mainWindow.ShowAll();
Application.Run();
static void Connect()
// Connect to OOo
if (componentContext == null)
componentContext = uno.util.Bootstrap.bootstrap();
try
multiServiceFactory =
(XMultiServiceFactory) componentContext.getServiceManager();
catch
// This is where we want to reconnect, but trying to
// bootstrap() again segfaults.
// componentContext = uno.util.Bootstrap.bootstrap();
// multiServiceFactory =
// (XMultiServiceFactory) componentContext.getServiceManager();
loader = (XComponentLoader)
multiServiceFactory.createInstance("com.sun.star.frame.Desktop");
document = (XTextDocument) loader.loadComponentFromURL
("private:factory/swriter", "_blank", 0, new PropertyValue[0]);
【问题讨论】:
这可能是一个愚蠢的问题,但是您是否设置了 OOo 以在所有文档关闭后完全退出? 我愿意(从某种意义上说,我没有使用 Quickstarter 或其他任何东西)。但是,我注意到,当我关闭文档时,不会为 componentContext、multiServiceFactory 或加载程序调用“disposed”信号。只有“文档”会调用已处置的信号。 【参考方案1】:我一直无法解决这个问题,但我确实找到了解决它的方法:
我创建了一个单独的可执行文件来进行生成。然后,我的主应用程序调用这个可执行文件,向它传递必要的参数(只是生成文件的路径,以及生成的模式)。
由于只有在应用程序开始运行(并生成至少一个图表)后关闭 OOo 时才会发生崩溃,因此这避免了整个问题。这是一个非常丑陋的 hack,但它完成了工作。
【讨论】:
以上是关于OpenOffice.org 关闭后如何重新连接?的主要内容,如果未能解决你的问题,请参考以下文章