定义富客户机应用程序

富客户机应用程序插件定义的出发点与我们已经学习的其他插件的出发点相似。在 MANIFEST.MF 文件中的唯一区别是,必需的插件列表比我们使用过的插件列表内容更少!

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.ui.examples.rcp.browser; singleton:=true
Bundle-Version: 3.2.0.qualifier
Bundle-ClassPath: browser.jar
Bundle-Activator: org.eclipse.ui.examples.rcp.browser.BrowserPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Require-Bundle: org.eclipse.core.runtime,
 org.eclipse.ui
Eclipse-AutoStart: true
Eclipse-AutoStart-comment: Use Eclipse-AutoStart instead of Eclipse-LazyStart because the browser example should run against 3.1 as well as 3.2.

到目前为止,已通过声明将元素添加至工作台的扩展来将功能添加至平台工作台。到目前为止,在已查看的所有 plugin.xml 内容中,我们只查看了假定就位于工作台中的各个添加项。在富客户机平台上,尚未定义任何应用程序。富客户机插件就是负责指定启动平台时应该执行的类的插件。这是在 org.eclipse.core.runtime.applications 扩展中完成的。

   <extension
         point="org.eclipse.core.runtime.applications"
         id="app"
         name="%appName">
      <application>
         <run
            class="org.eclipse.ui.examples.rcp.browser.BrowserApp">
         </run>
      </application>
   </extension>

在此扩展中,我们指定第一次启动平台时应该运行的类。此类必须实现 IPlatformRunnable,这只是意味着它必须实现 run 方法。run 方法负责创建 SWT 屏幕和启动工作台。PlatformUI 类实现用于执行这些任务的方便方法。

	public Object run(Object args) throws Exception {
		Display display = PlatformUI.createDisplay();
		try {
			int code = PlatformUI.createAndRunWorkbench(display,
					new BrowserAdvisor());
			// exit the application with an appropriate return code
			return code == PlatformUI.RETURN_RESTART
					? EXIT_RESTART
					: EXIT_OK;
        } finally {
			if (display != null)
				display.dispose();
		}
	}

直到工作台关闭之后,才将返回对 createAndRunWorkbench 的调用。SWT 事件循环和其他低级事务是在此方法中处理的。在目前阶段,了解运行 SWT 应用程序的底层机制并不是很重要。可以在对此代码进行很小更改之后将它复制至富客户机应用程序。实际上,供您添加您自己的功能的挂钩是创建工作台时作为参数传递的 WorkbenchAdvisor。让我们更仔细地查看一下。