实现
From Apache OpenOffice Wiki
< Zh | Documentation
作业必须实现服务 com.sun.star.task.Job(如果需要阻塞执行此作业时所在的线程)或者实现 com.sun.star.task.AsyncJob(如果办公软件的当前状态对于作业不重要)。作业实现支持的服务将在运行时检测。如果二者都可用,则作业执行环境优先选择同步服务 com.sun.star.task.Job。
同步作业不得对环境作出假设,无论该作业是当前运行的唯一作业,还是有其他作业在等待其运行结果。作业完成其任务前,只有同步作业的线程上下文被阻塞。
异步作业不能在内部使用线程,因为 OpenOffice.org 需要控制线程的创建。如何执行异步作业是全局作业执行环境的实现细节。
需要用户界面的作业必须小心处理,以使它们不会干涉 OpenOffice.org 的信息循环。可以采用以下规则:
- 不能显示任何同步作业中的用户界面,因为会产生重绘错误和其他线程问题。
- 获取异步作业的用户界面的最简单方法就是使用非模态的对话框。如果需要模态对话框以获取用户输入,则会出现问题。最好的方法是使用框架引用,它是作业环境初始数据的一部分,并将其容器窗口作为父窗口。父窗口可用于使用用户界面工具包 com.sun.star.awt.Toolkit 来创建对话框。在 编写 UNO 组件 - 将组件集成到 OpenOffice.org - 协议处理程序 - 实现 中介绍的 C++ 协议处理器显示了模态消息框如何使用此方法。
- 使用本机工具包或用于 GUI 的 Java AWT 可以导致非绘制 OpenOffice.org。为避免这一点,用户界面必须是非模态的,并且实现必须允许办公软件通过支持 com.sun.star.lang.XComponent 或 com.sun.star.util.XCloseable 中止作业。
应该支持可选接口 com.sun.star.lang.XComponent 或 com.sun.star.util.XCloseable,以便可以用受控方式处置作业。当这些接口存在时,执行环境可以调用 dispose()
或 close()
而不是等待作业完成。否则,OpenOffice.org 必须等待,直到作业完成。不可见的作业尤其会遇到问题,因为不能将它们识别为 OpenOffice.org 拒绝退出的原因。
Content on this page is licensed under the Public Documentation License (PDL). |